Hive 配置单元在使用OpenCSVSerde时未读取字符斜杠

Hive 配置单元在使用OpenCSVSerde时未读取字符斜杠,hive,hive-serde,Hive,Hive Serde,我已经在hdfs中存在的文件之上定义了一个表。我正在使用OpenCSV 插入以从文件中读取。但是数据中的“\”斜杠字符在最终结果集中被忽略 是否存在我未正确使用的配置单元服务器属性。根据,escapeChar='\'应该可以解决此问题。但是,问题依然存在 CREATE EXTERNAL TABLE `tsr`( `last_update_user` string COMMENT 'from deserializer', `last_update_datetime` stri

我已经在hdfs中存在的文件之上定义了一个表。我正在使用OpenCSV 插入以从文件中读取。但是数据中的“\”斜杠字符在最终结果集中被忽略

是否存在我未正确使用的配置单元服务器属性。根据,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:我尝试将
'\\'和'\'
作为escapeChar,并且两者都有相同的问题

在文档中,
“escapeChar”=“\\”
用两个反斜杠提及。请检查一下

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

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

替换
\
,我有一个类似的问题,可以通过将“escapeChar”=“\”更改为其他内容来解决,例如“escapeChar”=“\n”

“\\”是覆盖默认转义字符“\”。我已经尝试了这两种方法,但都没有在serde属性中将“escapeChar”工作集设置为除反斜杠以外的其他内容。您可以为输入文件提供示例数据吗?与源代码团队交谈,并关注可以安全用于escapeChar的字符。谢谢你的帮助!!