hive建表相关

hdfs根目录的结构:


可见,/user/hive/warehouse/下存放着具体的hive表的数据仓库存储位置。这个路径跟前面的配置有关:

hive-site.xml中hive.metastore.warehouse.dir为:hdfs://192.168.7.151:9000/user/hive/warehouse

/flume存放的是flume原始数据。

上图上标红的


文件原本是在hdfs://bg01:9000/flume/data/2018-06-06/下的,而现在没有了:


可能是因为之前执行了hive表的load数据导致的:

hive> load data inpath 'hdfs://192.168.7.151:9000/flume/data/2018-06-06/d_.1528246769709' into table tablezm;

成功!

Loading data to table default.tablezm
Table default.tablezm stats: [numFiles=1, totalSize=13507]

OK


现在测试一下:

目前hdfs://bg01:9000/flume/data/2018-06-06/下只有一个文件d_.1528257828250



可见,数据文件d_.1528257828250被从flume目录下转移到了hive目录下。


另一个问题:

原数据文件中数据格式如下:


前三行被空格space分割成了5部分。所以在创建表的时候,创建了5个字段以存储:


可是结果并没有如预想的:



看建表语句:


row format delimited 一行的格式被限定,用来设置创建的表在加载数据的时候支持列分隔符。

fields terminated by '\t' 以制表符\t 作为列分隔符(\t制表符  \n换行符)。

正是此问题所在。数据文件中数据是以空格\s为分隔符的。

为验证,

准备数据:


创建表并load data:


报错,

[bg@BG01 ~]$ hdfs dfs -put /home/bg/t.txt hdfs://192.168.7.151:9000/tmp/


又失败!

hive> create table tablezm4(a string,b string,c string) row format delimited fields terminated by '\001' stored as textfile;

仍然失败!

数据文件中数据以制表符分割则可以成功:









猜你喜欢

转载自blog.csdn.net/yblbbblwsle/article/details/80652039