将包含带引号的值的表导出到配置单元中的本地csv

nbewdwxp  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(469)

我正在尝试将表导出到配置单元中的本地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”,结果文件变得非常混乱。
在配置单元中导出时,是否有任何方法将值括在引号中,以便csv文件可以包含特殊字符(尤其是换行符)?

dpiehjr4

dpiehjr41#

一个可能的解决办法是 Hive CSV SerDe (Serializer/Deserializer) . 它提供了一种指定 custom delimiters, quote, and escape characters .
限制:
它不能处理 embedded newlines 可利用性:
这个 CSV Serde 在hive 0.14及更高版本中可用。
背景:
这个 CSV SerDe 基于https://github.com/ogrodnek/csv-serde,并被添加到 Hive 在hive-7777中的分布。
用法:
这个 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        ,

参考:配置单元csv serde

相关问题