配置单元外部表以逗号分隔,但数据中出现逗号

时间:2019-05-23 20:04:55

标签: sql hadoop hive external-tables

我有一些数据来自外部格式,

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放入下一列(位置),并将数据放入最后一列。

所有传入的数据字段都用双引号引起来,但是即使它们中可能包含逗号,它们也是用逗号分隔的。不幸的是,让发送者清除数据不是一种选择。

如何创建该表?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

尝试

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