向Hive的表里insert 批量insert数据
通过本地文件直接导入
load data local inpath '/root/tmp_data.txt' overwrite into table t2;
先把本地文件上传到hdfs,再导入hive
hdfs dfs -put tmp_data.txt /user/root
load data inpath '/user/root/tmp_data.txt' overwrite into table t2;
参考文章
此处共有四种导入的形式:
1.通过外部表导入
用户在Hive上建有external表,建表的同时指定hdfs路径,在数据拷贝到指定hdfs路径的同时,也同时完成数据插入external表。
例如:
编辑文件test.txt
$ cat test.txt
1 hello
2 world
3 test
4 case
字段之间以'\t'分割
启动hive:
$ hive
建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';
OK
Time taken: 0.714 seconds
数据拷贝到hdfs:
$ Hadoop fs -put test.txt /data/test
2.从本地导入
数据不在hdfs上,直接从本地导入hive表
文件/home/work/test.txt内容同上
建表:
hive> CREATE TABLE MYTEST2(num INT, name STRING)
> COMMENT 'this is a test2'
> ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
> STORED AS TEXTFILE;
OK
Time taken: 0.077 seconds
导数据入表:
hive> LOAD DATA LOCAL INPATH '/home/work/test.txt' INTO TABLE MYTEST2;
注:此处默认是追加,如果想覆盖,先清空表在导入数据的话,需要加上overwrite
hive> LOAD DATA LOCAL INPATH '/home/work/test.txt' OVERWRITE INTO TABLE MYTEST2;
3.从hdfs导入
上述test.txt文件已经导入/data/test
则可以使用下述命令直接将数据导入hive表:
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;
Loading data to table default.mytest3
4. 从其它表导入数据:
hive> CREATE EXTERNAL TABLE MYTEST4(num INT) ;
hive> FROM MYTEST3 test3
> INSERT OVERWRITE TABLE MYTEST4
> select test3.num where name='world';