上一篇介绍了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/ 命令,可以查看该数据仓库下所有的表:


hive资源使用情况 hive的数据存放在哪里_hive


第一列为权限,第二列是用户,第三列用户组,第四列大小(此处不显示,需要再进一层目录),第五列为创建时间,第六列为hdfs上具体目录。

hive库中每个表都会在/user/hive/warehouse/database.db/下有相应目录。

找个表进去看:


hive资源使用情况 hive的数据存放在哪里_存储_02


可以看到,这时第四列有大小了。第一行是标识位,另外几行是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开始支持



下一篇具体介绍复杂类型的使用。