我正在尝试将csv文件加载到配置单元表中,如下所示:
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;
csv由逗号(,)分隔,如下所示:
1, "some text, with comma in it", 123, "more text"
这将返回损坏的数据,因为第一个字符串中有','。
有没有办法设置文本分隔符或使配置单元忽略字符串中的'''?
我无法更改csv的分隔符,因为它是从外部源提取的。
6条答案
按热度按时间h9vpoimq1#
org.apache.hadoop.hive.serde2.opencsvserde serde为我工作。我的分隔符是“|”,其中一列用双引号括起来。
查询:
brgchamk2#
从hive0.14开始,csv serde是hive安装的标准部分
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
(见:https://cwiki.apache.org/confluence/display/hive/csv+serde)eivgtgni3#
在以“\;”结尾的字段中添加反斜杠
例如:
我已经测试过了,而且成功了。
bxfogqkk4#
如果可以重新创建或分析输入数据,则可以为创建表指定转义字符:
将接受该行作为4个字段
ma8fv8wu5#
将分隔符放在单引号中,这样就可以了。
这会有用的
x6492ojm6#
问题是
Hive
不处理引用的文本。您需要通过更改字段之间的分隔符来预处理数据(例如:使用hadoop流作业),也可以尝试使用自定义csv serde,该serde使用opencsv来解析文件。