使用OpenCSVSerde时,hive不会读取字符斜杠

时间:2018-04-23 10:51:40

标签: hive hive-serde

我在hdfs中存在的文件之上定义了一个表。我正在使用OpenCSV Serde从文件中读取。但是,' \'数据中的斜杠字符在最终结果集中被省略。

是否有正确使用的hive serde属性。根据{{​​3}},escapeChar =' \'应该解决这个问题。但是,问题仍然存在。

   CREATE EXTERNAL TABLE `tsr`(
    `last_update_user` string COMMENT 'from deserializer',
    `last_update_datetime` string COMMENT 'from deserializer')
    ROW FORMAT SERDE
    'org.apache.hadoop.hive.serde2.OpenCSVSerde'
    WITH SERDEPROPERTIES (
    'escapeChar'='\',
    'quoteChar'='\"',
    'separatorChar'=',',
    'serialization.encoding'='UTF-8')
    STORED AS INPUTFORMAT
    'org.apache.hadoop.mapred.TextInputFormat'
    OUTPUTFORMAT
    'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
    LOCATION
    'hdfs://edl/hive/db/tsr'
    TBLPROPERTIES (
    'COLUMN_STATS_ACCURATE'='{\"BASIC_STATS\":\"true\"}',
    'numFiles'='1',
    'numRows'='1869',
    'rawDataSize'='0',
    'serialization.null.format'='',
    'totalSize'='144640',
    'transient_lastDdlTime'='1524479930')

示例输出:

DomainUser1 , 2017-07-04 19:07:27

预期结果:

Domain\User1 , 2017-07-04 19:07:27

编辑1:我已尝试将'\\' and '\'作为escapeChar并且两者都有相同的问题

3 个答案:

答案 0 :(得分:0)

在文档中提到"escapeChar"= "\\"有两个反斜杠。请检查一下。

WITH SERDEPROPERTIES (
   "separatorChar" = "\t",
   "quoteChar"     = "'",
   "escapeChar"    = "\\"
)

答案 1 :(得分:0)

不幸的是,Hive中的csv serde不支持多个字符作为分隔符/引用/转义,看起来你想使用2个backlslahes作为escapeChar(这是不可能的)比OpenCSVSerde只支持单个字符作为转义(实际上它使用CSVReader只支持一个)。我不知道在Hive中支持多个字符的任何其他SerDe,你总是可以用其他库实现你自己的udf,而不是最流行的选项(没有人想支持它自己的东西:))。我建议使用不同的字符作为转义,希望您的数据中不存在。第二种方法是在提取过程中修改您的数据,以便\

替换\\

答案 2 :(得分:0)

我有一个类似的问题,可以解决,将“ escapeChar” =“ \”更改为其他名称,例如“ escapeChar” =“ \ n”。