虽然可以使用 INSERT OVERWRITE
从 Hive 中提取数据,但这可能不是适合你的情况的最佳方法。首先,让我解释一下 INSERT OVERWRITE
的作用,然后我将描述我从 Hive 表中获取 tsv 文件的方法。
根据手册,你的查询将把数据存储在 HDFS 的一个目录中。格式将不是 csv。
写入到文件系统的数据会序列化为文本,其中以^A分隔列,并以换行符分隔行。如果任何列不是原始类型,则这些列将序列化为 JSON 格式。
稍作修改(加上 LOCAL
关键字)将数据存储在本地目录中。
INSERT OVERWRITE LOCAL DIRECTORY '/home/lvermeer/temp' select books from table;
当我运行类似的查询时,输出结果如下。
[lvermeer@hadoop temp]$ ll
total 4
-rwxr-xr-x 1 lvermeer users 811 Aug 9 09:21 000000_0
[lvermeer@hadoop temp]$ head 000000_0
"row1""col1"1234"col3"1234FALSE
"row2""col1"5678"col3"5678TRUE
就我个人而言,我通常会在命令行上直接通过Hive运行查询,并将结果导入本地文件中:
hive -e 'select books from table' > /home/lvermeer/temp.tsv
这为我提供了一个可以使用的制表符分隔文件。希望对您也有用。
根据此补丁-3682,我怀疑在使用Hive 0.11时有更好的解决方案,但我无法自行测试。新语法应该允许以下操作。
INSERT OVERWRITE LOCAL DIRECTORY '/home/lvermeer/temp'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
select books from table;