我正在尝试将表导出到配置单元中的本地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文件可以包含特殊字符(尤其是换行符)?
答案 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 ,