【问题标题】:Hive external table delimited by commas, but comma present in dataHive 外部表以逗号分隔,但数据中存在逗号
【发布时间】:2019-05-23 20:04:54
【问题描述】:

我有一些来自外部格式来源的数据:

user_id, user_name, project_name, position
"111", "Tom Petty", "Heartbreakers", "Vocals"
"222", "Ringo Starr", "Beatles, The", "Drummer"
"333", "Tom Brady", "Patriots", "QB"

于是我创建了我的外部表:

CREATE EXTERNAL TABLE tab1 (
USER_ID String,
USER_NAME String,
PROJECT_NAME String,
POSITION String
) 
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE
LOCATION '/user/blah/foo'

当某些列中的数据在其中嵌入逗号时会出现问题,例如Beatles, The。这会导致 Hive 将单词 The 放入下一列(位置)并删除最后一列中的数据。

所有传入的数据字段都用双引号括起来,但它们用逗号分隔,即使它们可能有逗号。不幸的是,让发件人清理数据不是一种选择。

我该如何创建这个表?

【问题讨论】:

标签: sql hadoop hive external-tables


【解决方案1】:

试试这个

ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
   "separatorChar" = "\t",
   "quoteChar"     = "\""
)  

【讨论】:

  • quoteChar 为 \" 的原因是什么?你能解释一下吗?
【解决方案2】:

您可以尝试在使用特定 serDe 属性的 Hive 表创建中使用 Open CSV Serde。

https://cwiki.apache.org/confluence/display/Hive/CSV+Serde

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多