从Hive中导出数据,写入到可以直接使用的文件,方法如下:
导出到本地
方法一:使用 linux 命令
可以使用 hive -e
或者 -f
命令,其中 -e
表示直接执行后面跟的参数sql,-f
表示执行文件中所有的sql。
$ hive -e "select * from dev.test_table limit 10" > hive_result
这个命令会将 select * from dev.test_table limit 10
的结果写入到 hive_result
本地文件中,每一列用 \t 相连接。
$ cat hive_sql
select * from dev.test_table limit 10;
select sku_id from dev.test_table limit 10;
$ hive -f hive_sql > hive_result2
这个命令会将两个sql的结果依次写入到 hive_result2
本地文件中,每一列用 \t 相连接。两个 sql 的列数可以不同。
方法二:使用 hive 命令
hive> insert overwrite local directory 'hive_result3'
> select * from dev.test_table limit 10;
这个命令会将结果写入到 hive_result3
文件夹下,如 hive_result3/000000_0
。每一列用 ^A 相连接。
如果不想用 ^A 分割,可以修改列之间的分隔符,如:
hive> insert overwrite local directory 'hive_result4'
> row format delimited
> fields terminated by '\t'
> select * from dev.test_table limit 10;
这个命令会将结果写入到 hive_result4/000000_0
,每一列用 \t 相连接。
备注:
[row format delimited]关键字,是用来设置创建的表在加载数据的时候,支持的列分隔符。
比如:
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
COLLECTION ITEMS TERMINATED BY '\002'
MAP KEYS TERMINATED BY '\003'
表示不同列之间用一个\001
分隔,集合(例如array, map)的元素之间以\002
分隔,map中key和value用\003
分隔。
导出到HDFS
使用 linux 命令实现:
hive> insert overwrite directory '/user/test'
> select * from dev.test_table limit 10;
和导入数据到本地文件系统类似,但是少了 local
。这个命令将会在 HDFS 的 /user/test
目录下保存导出来的数据。