【问题标题】:Export table enclosing values with quotes to local csv in hive将包含引号的表导出到 hive 中的本地 csv
【发布时间】:2016-01-20 03:32:21
【问题描述】:

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

【问题讨论】:

    标签: csv hadoop hive export-to-csv


    【解决方案1】:

    一种可能的解决方案是使用 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-7777.Hive 分布中

    用法:

    这个 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

    【讨论】:

      猜你喜欢
      • 2014-12-17
      • 1970-01-01
      • 1970-01-01
      • 2021-01-24
      • 1970-01-01
      • 1970-01-01
      • 2014-06-16
      • 2012-08-12
      • 1970-01-01
      相关资源
      最近更新 更多