【问题标题】:output hive query result as csv enclosed in quotes将 hive 查询结果输出为用引号括起来的 csv
【发布时间】:2017-01-29 07:01:11
【问题描述】:

我必须从 csv 文件中的配置单元表中导出数据,其中的字段用双引号引起来。

到目前为止,我可以使用以下查询生成不带引号的 csv

INSERT OVERWRITE DIRECTORY '/user/vikas/output'
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ','
SELECT QUERY

生成的输出看起来像

1,Vikas Saxena,Banking,JL5

但是,我需要输出为

"1","Vikas Saxena","Banking","JL5" 

我尝试将查询更改为

INSERT OVERWRITE DIRECTORY '/user/vikas/output'
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
   "separatorChar" = ",",
   "quoteChar"     = "\"",
   "escapeChar"    = "\\"
)
SELECT QUERY

但显示错误

Error while compiling statement: FAILED: ParseException line 1:0 cannot recognize input near 'ROW' 'FORMAT' 'SERDE'

【问题讨论】:

  • 那么你为什么不直接创建一个映射到该目录的EXTERNAL TABLE,在其中插入,然后删除表?
  • 使用 hive concat。即 concat("\"",col,"\"")

标签: csv hive export-to-csv


【解决方案1】:

创建外部表:

CREATE EXTERNAL TABLE new_table(field1 type1, ...)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
"separatorChar" = ",",
"quoteChar" = "\""
)
STORED AS TEXTFILE
LOCATION '/user/vikas/output';

然后选择该表:

insert into new_table select * from original_table;

您的 CSV 然后在 /user/vikas/output 上的磁盘上

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    • 2011-02-14
    相关资源
    最近更新 更多