我不是正则表达的专家,而且我在Hive中使用regexp_replace时会遇到问题。
我想将CSV文件加载到Hive中,其中包含类似的行:
AAA,1234,BBB,,,"""CC,CCC""","""DDD""","""EE"EEE""",,
"""AAA""",1234,BBB,,,CCCC,"""DD,DD""",,"""FFFF""",
如您所见,格式并非完美
当我尝试将其导入Hive表时,由于没有转义的逗号,因此未对列进行很好的解析。
所以我将原始数据作为行导入到Hive表中,如下所示:
CREATE EXTERNAL TABLE MyRawTable
(
RAW_DATA STRING
)
STORED AS TEXTFILE
LOCATION '/path/to/hdfs/file'
我试图使用regexp_replace函数来转换行:
所以数据看起来像这样:
AAA,1234,BBB,,,CC\,CCC,DDD,EE\"EEE,,
AAA,1234,BBB,,,CCCC,DD\,DD,,FFFF,
我找不到这个正则表达式的解决方案,任何想法?非常感谢!
答案 0 :(得分:1)
忘掉正则表达式,你不需要它。逗号不会被转义,但它们被双引号括起来。您只需使用OpenCSVSerde:
即可CREATE EXTERNAL TABLE yourtable(foo int, bar string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
"separatorChar" = ",",
"quoteChar" = "\"",
"escapeChar" = "\""
)
LOCATION '/your/folder/containing/csv/files/';