数据装载入表
代码语言:javascript复制LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename
[PARTITION (partcol1=val1, partcol2=val2 ...)]
注意事项:
- hive建表默认使用单个分隔符号:例如:如果定义分隔符号‘#$’,数据查询只有#被当作分隔符号使用。
- load数据,字段类型不匹配时,查询返回NULL select查询插入数据,字段类型不匹配时,查询返回NULL hive在数据加载的时候不做类型检查,查询的时候做检查。
- 外部分区表:即使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)