【发布时间】:2021-01-22 15:48:55
【问题描述】:
有人可以指导我如何将数据加载到配置单元中,我得到“在某些行中,而在某些行中,数据没有”对于相同的列值。
Sample Data:
id,name,desc,uqc,roll,age
1,Monali,"abhc,jkjk",,23,23
2,mj,nhiijkla,67,23,60
7,jena,"kdjuu,hsysi,juw",3,34,23
1,Monali,"/"coppers bars","rods and profiles"/",,23,23
2,money,"/"COUPLING","FLANGES & CROSS OVER"/",67,23,60
id '2' 的上述数据“在 desc 列值中不存在。
我的创建声明:
create external table testing(id int,
name string,
desc string,
uqc double,
roll int,
age int
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES ('input.regex'='^(\\d+?),(.*?),"(.*)",([0-9.]*),([0-9]*),([0-9]*).*')
location ....
TBLPROPERTIES("skip.header.line.count"="1")
;
在加载数据时,我没有收到任何错误。但是当我执行 select * from testing.select 语句时不会执行。上面的创建和选择语句工作正常如果数据带有“,但如果数据带有和不带有”则不起作用。
【问题讨论】:
-
你能用openCSVSerde吗?
CREATE EXTERNAL TABLE tab ( desc STRING, id BIGINT ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES ( "separatorChar" = ",", "quoteChar" = "\"") LOCATION '/your/dir/location/'; -
@KoushikRoy 我试过了,但如果是这一行:--> 2,money,"17",19"LCD PANEL FOR COMPUTER",67,23,60 它不起作用。 "17",19"LCD PANEL FOR COMPUTER" 是我的 desc 列值的值,但它在 desc 列中加载 17,在下一列中加载 19"LCD PANEL FOR COMPUTER。
-
你不觉得这不一致吗?你能把所有的列都用双引号括起来吗?这将确保良好的数据质量。如果它不可能,那么我不确定我们如何加载它。
标签: sql regex hive hiveql hive-serde