Hive中使用insert、import、export命令进行数据交换
一、INSERT OVERWRITE
INSERT支持将数据写入文件,通常在使用SELECT语句查询数据时将查询的数据写入本地或者HDFS目录。但是,仅仅支持OVERWRITE关键字,即只能使用覆盖的方式写入数据,默认情况下,使用Ctrl+A作为列分隔符,可以手动指定分隔符。
1.使用默认的分隔符导出数据到本地目录
INSERT OVERWRITE LOCAL DIRECTORY '/tmp/output1'
SELECT * FROM employee;
2.手动指定分隔符
INSERT OVERWRITE LOCAL DIRECTORY '/tmp/output2'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
SELECT * FROM employee;
3.将数据导出到HDFS
INSERT OVERWRITE DIRECTORY '/opt/datas'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
SELECT * FROM employee;
二、使用hive -e命令实现导出数据到文件
结合HQL和HDFS shell命令,使用hive -e 执行一个HQL查询语句或者使用hive -f命令执行一个脚本文件,可以使用追加和覆盖的方式将数据写入文件中。
1.追加数据到本地文件
$hive -e 'select * from employee' >> test
2.使用覆盖的方式导出数据到本地文件
$hive -e 'select * from employee' > test
3.使用追加的方式导出数据到HDFS(注:-appendToFile中间没有空格,- /tmp/test1中间有空格)
$hive -e 'select * from employee'|hdfs dfs -appendToFile - /tmp/test1
4.使用覆盖的方式导出数据到HDFS
$hive -e 'select * from employee'|hdfs dfs -put -f - /tmp/test2
三、使用import和export实现数据导入与导出
当进行数据迁移或者部署发布时,需要在不同的环境或者集群中移动数据。使用HQL的EXPORT和IMPORT命令能够实现不同环境或集群的HDFS之间移动数据。EXPORT命令会导出数据和元数据,导出的元数据为_metadata,数据在data目录中。一旦导出数据,可以使用hadoop的discp <srcurl> <desurl>命令实现数据迁移。
1.导出表到HDFS
hive (default)> EXPORT TABLE person_info TO '/opt/datas/output_person';
查看HDFS:
[kms@kms-1 hadoop-2.7.7]$ bin/hdfs dfs -ls -R /opt/datas/output_person
-rwxrwxrwx 3 kms kms 1325 2019-02-27 21:17 /opt/datas/output_person/_metadata
drwxrwxrwx - kms kms 0 2019-02-27 21:17 /opt/datas/output_person/data
-rwxrwxrwx 3 kms kms 107 2019-02-27 21:17 /opt/datas/output_person/data/person_info
2.导入数据到hive,如果表存在,则会报错
IMPORT TABLE person_import FROM '/opt/datas/output_person';
3.以外部表的方式导入Hive,LOCATION属性是可选的
IMPORT EXTERNAL TABLE person_imported_external FROM '/opt/datas/output_person' LOCATION '/opt/datas/external';
4.导入导出分区表
hive (default)> EXPORT TABLE music2 partition (date_time="2019-2-26") TO '/opt/datas/music_out';
Copying data from file:/tmp/kms/088a5dd5-f6f9-40a9-9b84-b54e5fe20793/hive_2019-02-27_22-18-21_709_1734130447694869702-1/-local-10000/_metadata
Copying file: file:/tmp/kms/088a5dd5-f6f9-40a9-9b84-b54e5fe20793/hive_2019-02-27_22-18-21_709_1734130447694869702-1/-local-10000/_metadata
Copying data from hdfs://kms-1.apache.com:8020/user/hive/warehouse/music2/date_time=2019-2-26
Copying file: hdfs://kms-1.apache.com:8020/user/hive/warehouse/music2/date_time=2019-2-26/000000_0
Copying file: hdfs://kms-1.apache.com:8020/user/hive/warehouse/music2/date_time=2019-2-26/000001_0
Copying file: hdfs://kms-1.apache.com:8020/user/hive/warehouse/music2/date_time=2019-2-26/000002_0
Copying file: hdfs://kms-1.apache.com:8020/user/hive/warehouse/music2/date_time=2019-2-26/000003_0
OK
Time taken: 0.527 seconds
hive (default)> IMPORT TABLE music2_partitioned_imported
> FROM '/opt/datas/music_out';
Copying data from hdfs://kms-1.apache.com:8020/opt/datas/music_out/date_time=2019-2-26
Copying file: hdfs://kms-1.apache.com:8020/opt/datas/music_out/date_time=2019-2-26/000000_0
Copying file: hdfs://kms-1.apache.com:8020/opt/datas/music_out/date_time=2019-2-26/000001_0
Copying file: hdfs://kms-1.apache.com:8020/opt/datas/music_out/date_time=2019-2-26/000002_0
Copying file: hdfs://kms-1.apache.com:8020/opt/datas/music_out/date_time=2019-2-26/000003_0
Loading data to table default.music2_partitioned_imported partition (date_time=2019-2-26)
OK
Time taken: 0.829 seconds
公众号「大数据技术与数仓」
专注分享数据仓库与大数据技术