我正在将数据加载到配置单元表中,该表本身包含逗号。
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
当我创建下面的配置单元表并加载数据时,数据未正确传入:
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!
如何将数据加载到配置单元表?
1条答案
按热度按时间e4yzc0pl1#
提供以下解决方案假设:
您总是只需要从csv中提取2个col。
第一列是数字,第二列一直延伸到第一个字符后的行尾。
您需要替换中的任何“,”字符
name
带空格的列。使用regexserde定义表和加载
将“名称”列中的“,”替换为空格
然后,继续
select * from hive_test1
,您将获得以下信息:101迪帕克库马尔达斯
102 sumita kumari das酒店
103拉杰什·库马尔·达斯