hive数据加载

2020-09-23 11:20:02 浏览数 (1)

数据装载入表

代码语言:javascript复制
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表。

代码语言:javascript复制
$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文件系统导入

代码语言:javascript复制
#建表:
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导入

代码语言:javascript复制
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 ;

从其它表导入数据:

代码语言:javascript复制
hive> CREATE EXTERNAL TABLE MYTEST4(num INT) ;
hive> FROM MYTEST3 test3
    > INSERT OVERWRITE TABLE MYTEST4
    > select test3.num where name='world';

喜欢 (157)or分享 (0)

0 人点赞