【发布时间】:2018-05-04 02:15:16
【问题描述】:
我正在将数据加载到数据本身中包含逗号的配置单元表中。
input file:emp.csv
101,deepak,kumar,das
102,sumita,kumari,das
103,rajesh kumar das
output :
id name
101 deepak kumar das
102 sumita kumari das
103 rajesh kumar das
当我创建下面的 hive 表并加载数据时,数据没有正确输入:
create external table hive_test(
id int, name string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
STORED AS TEXTFILE
LOCATION '/hive_demo';
load data local inpath '/home/cloudera/hadoop/hive_demo/emp.csv' overwrite into table hive_test;
hive> select * from hive_test;
101 deepak
102 sumita
103 rajesh kumar das
所以我创建了下表,但它给出了错误。
create external table hive_test1(
id int,
name string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES(
"separatorChar" = ",",
"quoteChar" = "'",
"escapeChar" = "\,")
STORED AS TEXTFILE
LOCATION '/hive_demo';
load data local inpath '/home/cloudera/hadoop/hive_demo/emp.csv' overwrite into table hive_test1;
select * from hive_test1;
Failed with exception
java.io.IOException:org.apache.hadoop.hive.serde2.SerDeException:
java.lang.UnsupportedOperationException: The separator, quote, and escape characters must be different!
如何将数据加载到 Hive 表中?
【问题讨论】:
-
您的输入文件一团糟:第二个字段周围没有引号,就无法定义正确的 CSV 映射(这不是 Hive 特有的)。选项 1:正确重建该文件,或者使用不同的分隔符,例如制表符或分号,或在文本字段周围加上引号。选项 2:使用例如修复现有文件
sed例如用另一个“分隔符”字符替换第一个冒号字符。选项 3:也许“正则表达式 serde”可以用作 Hive 中的解决方法,但恕我直言,这将是一个蹩脚的修复。
标签: hive