Hive在引用字段中使用逗号加载CSV

Mar*_*ink 46 hadoop hbase hive delimiter hdfs

我正在尝试将CS​​V文件加载到Hive表中,如下所示:

CREATE TABLE mytable
(
num1 INT,
text1 STRING,
num2 INT,
text2 STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ",";

LOAD DATA LOCAL INPATH '/data.csv'
OVERWRITE INTO TABLE mytable;    
Run Code Online (Sandbox Code Playgroud)


csv由逗号(,)分隔,如下所示:

1, "some text, with comma in it", 123, "more text"
Run Code Online (Sandbox Code Playgroud)

这将返回损坏的数据,因为第一个字符串中有一个','.
有没有办法设置文本分隔符或让Hive忽略字符串中的','?

我无法更改csv的分隔符,因为它是从外部源中提取的.

Lor*_*dig 33

问题是Hive不处理引用的文本.您需要通过更改字段之间的分隔符来预处理数据(例如:使用Hadoop-streaming作业),或者您也可以尝试使用使用OpenCSV解析文件的自定义CSV SerDe.


lib*_*ack 32

如果可以重新创建或解析输入数据,则可以为CREATE TABLE指定转义字符:

ROW FORMAT DELIMITED FIELDS TERMINATED BY "," ESCAPED BY '\\';
Run Code Online (Sandbox Code Playgroud)

将此行接受为4个字段

1,some text\, with comma in it,123,more text
Run Code Online (Sandbox Code Playgroud)

  • 它处理嵌入式逗号,但不处理嵌入的换行符,这是CSV数据中的另一个问题.或者换行也可以逃脱?https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-CreateTable中的规范似乎不允许转义换行符. (5认同)

wrs*_*der 22

从Hive 0.14开始,CSV SerDe是Hive安装的标准部分

ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'

(参见:https://cwiki.apache.org/confluence/display/Hive/CSV+Serde)