导出表,用引号括起值到hive中的本地csv

时间:2015-10-21 08:16:36

标签: csv hadoop hive export-to-csv

我正在尝试将表导出到配置单元中的本地csv文件。

INSERT OVERWRITE LOCAL DIRECTORY '/home/sofia/temp.csv' 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ',' 
ESCAPED BY '\\' 
LINES TERMINATED BY '\n'
select * from mytable;

问题是某些值包含换行符“\ n”字符,结果文件变得非常混乱。

在Hive中导出时是否有任何方法将值括在引号中,以便csv文件可以包含特殊字符(尤其是换行符)?

1 个答案:

答案 0 :(得分:2)

一种可能的解决方案是使用 Hive CSV SerDe (Serializer/Deserializer) 。它提供了一种指定 custom delimiters, quote, and escape characters 的方法。

<强>限制:

它无法处理 embedded newlines

<强>状况:

Hive 0.14及更高版本中提供了 CSV Serde

<强>背景

CSV SerDe 基于https://github.com/ogrodnek/csv-serde,已添加到HIVE-7777. <中的 Hive 分发中/ p>

<强>用法:

SerDe 适用于大多数 CSV data ,但不会处理 embedded newlines 。要使用 SerDe ,请指定完全限定的类名 org.apache.hadoop.hive.serde2.OpenCSVSerde

原始文档位于https://github.com/ogrodnek/csv-serde

CREATE TABLE my_table(a string, b string, ...)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
   "separatorChar" = "\t",
   "quoteChar"     = "'",
   "escapeChar"    = "\\"
)  
STORED AS TEXTFILE;

如果未指定,则为默认分隔符,引号和转义字符

DEFAULT_ESCAPE_CHARACTER \
DEFAULT_QUOTE_CHARACTER  "
DEFAULT_SEPARATOR        ,

参考:Hive csv-serde