上一篇介绍了hive的架构,以及hive语句执行的过程。
这篇介绍hive的文件存储和基本数据类型。
Hive是hdfs上的数据仓库,而hdfs上存放的都是文件,所以hive中的表可以理解为对hdfs上文件的映射。
看完下面的介绍,相信你能很清楚的理解:“hive中的表就是hdfs的文件”这句话。
一,hive的文件存储
默认hive仓库的路径为/user/hive/warehouse/database.db/
使用hadoop dfs –ls /user/hive/warehouse/database.db/ 命令,可以查看该数据仓库下所有的表:
第一列为权限,第二列是用户,第三列用户组,第四列大小(此处不显示,需要再进一层目录),第五列为创建时间,第六列为hdfs上具体目录。
hive库中每个表都会在/user/hive/warehouse/database.db/下有相应目录。
找个表进去看:
可以看到,这时第四列有大小了。第一行是标识位,另外几行是hive自动把表分成了几份文件。如果将其中一个part删掉,相应的该表数据量会减少。
如果把其中一个part再load一份,相应的表数据又会增加。(可以先把文件get到本地,再put进去,或者建一个备份表,把备份表的文件移动过去或者使用load命令)
注:如果相同文件,hive会自动给文件命名为copy。
所以如果你不小心把hdfs上相应的表文件全部删掉了,就相当于在hive中执行了truncate table操作。
2、Hive建表语句:
CREATE TABLE IF NOT EXISTS table_name
(
company_name String comment '公司名称',
company_id String comment '公司ID'
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY'\t'
LINES TERMINATED BY '\n';
stored as textfile;
最后几句分别代表,指定列分隔符为制表符,行分隔符为\n,并且该表文件在hdfs中存储格式为text格式。
3、load命令
可以直接将linux本地文件load到hive表中,只要保证文件类型、列分隔符和行分隔符与建表时指定的一致。
具体语句:
load data local inpath '文件名' into table tablename;
假设文件不在本地,则不需要local关键字。
4、hive的基本数据类型
数据类型 | 所占字节 | 开始支持版本 |
TINYINT | 1byte | |
SMALLINT | 2byte | |
INT | 4byte | |
BIGINT | 8byte | |
BOOLEAN | ||
FLOAT | 4byte单精度 | |
DOUBLE | 8byte双精度 | |
STRING | ||
BINARY |
| 从Hive0.8.0开始支持 |
TIMESTAMP |
| 从Hive0.8.0开始支持 |
DECIMAL |
| 从Hive0.11.0开始支持 |
CHAR |
| 从Hive0.13.0开始支持 |
VARCHAR |
| 从Hive0.12.0开始支持 |
DATE |
| 从Hive0.12.0开始支持 |
下一篇具体介绍复杂类型的使用。