博主自主知识产权《springboot深入浅出系列课程》(16章97节文档免费) 已经上线,请关注

hive数据加载

Hive 字母哥 3269℃ 0评论

数据装载入表


LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]

注意事项:

  1. hive建表默认使用单个分隔符号:例如:如果定义分隔符号‘#$’,数据查询只有#被当作分隔符号使用。
  2. load数据,字段类型不匹配时,查询返回NULL
    select查询插入数据,字段类型不匹配时,查询返回NULL
    hive在数据加载的时候不做类型检查,查询的时候做检查。
  3. 外部分区表:即使HDFS目录结构符合分区,数据加载后,仍然需要表结构添加分区才能查看数据。否则有数据也看不到。

通过外部表导入

用户在hive上建external表,建表的同时指定hdfs路径,在数据拷贝到指定hdfs路径的同时,也同时完成数据插入external表。


$hadoop fs -cat /data/test/test.txt 1 hello 2 world 3 test 4 case #字段之间以'\t'分割 #建external表: hive> CREATE EXTERNAL TABLE MYTEST(num INT, name STRING) > COMMENT 'this is a test' > ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' > STORED AS TEXTFILE > LOCATION '/data/test';

从本地linux文件系统导入


#建表: hive> CREATE TABLE MYTEST2(num INT, name STRING) > COMMENT 'this is a test2' > ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' > STORED AS TEXTFILE; #导数据入表: hive> LOAD DATA LOCAL INPATH '/home/work/test.txt' INTO TABLE MYTEST2; #这种方式导入的本地数据可以是一个文件,一个文件夹或者通配符,需要注意的是,如果是文件夹,文件夹内不能包含子目录,同样,通配符只能通配文件。

从hdfs导入


hive> CREATE TABLE MYTEST3(num INT, name STRING) > COMMENT "this is a test3" > ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' > STORED AS TEXTFILE; hive> LOAD DATA INPATH '/data/test/test.txt' INTO TABLE MYTEST3; hive> select * from MYTEST3 ;

从其它表导入数据:


hive> CREATE EXTERNAL TABLE MYTEST4(num INT) ; hive> FROM MYTEST3 test3 > INSERT OVERWRITE TABLE MYTEST4 > select test3.num where name='world';

转载请注明:字母哥博客 » hive数据加载

喜欢 (157)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(1)个小伙伴在吐槽
  1. 赞! 😛
    匿名2016-05-18 11:25 回复