我正在尝试将表导出到配置单元中的本地 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 文件可以包含特殊字符(尤其是换行符)?
最佳答案
一种可能的解决方案是使用Hive CSV SerDe(序列化器/反序列化器)
。它提供了一种指定自定义分隔符、引号和转义字符
的方法。
限制:
它不处理嵌入换行符
可用性:
CSV Serde
可在Hive 0.14 中使用。甚至更大。
背景:
CSV SerDe
基于 https://github.com/ogrodnek/csv-serde ,并添加到 HIVE-7777. 中的 Hive
发行版中
用法:
此SerDe
适用于大多数CSV数据
,但不处理嵌入换行符
。要使用 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 - 将包含带引号的值的表导出到 hive 中的本地 csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33254183/