目标:将给定的
.csv
加载到 hive 中。
问题:
.csv
中的一个未加引号的字符串列在某些行中包含逗号。这会产生逗号多于列的行,从而导致这些行中的数据错误。
.csv
内的示例:
Id,Name,City,Ranking,Rating,PriceRange,NumberOfReviews
1,Cafe Q,Lisbon,104,4.5,exp,999
2,Quarto Burguer,Rome,1920,4.0,exp,569
3,Gertrude's Cafe, L'angolo dell'amore,Budapest,55,4.5,med,397
4,Rincon Bar,Valencia,23,4.5,cheap,904
如图所示,第三行的名称是“Gertrude's Cafe, L'angolo dell'amore”,这在该行中添加了一个逗号。
如何在 Hive 中加载此文件并将“Gertrude's Cafe, L'angolo dell'amore”转换为不带逗号的内容?
这是我的表格创建器和数据加载代码。
CREATE TABLE IF NOT EXISTS restaurant
(
Id INT,
Name STRING,
City STRING,
Ranking DOUBLE,
Rating DOUBLE,
PriceRange STRING,
NumberOfReviews INT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE
LOCATION '/user/hive/path_etc'
tblproperties("skip.header.line.count"="1");
然后
LOAD DATA INPATH '/path/to/my_file.csv' OVERWRITE INTO TABLE restaurant;
我唯一尝试的是chatgpt答案,它添加了第三步:
-- Step 3: Update the column to replace commas with single quotes
INSERT OVERWRITE TABLE restaurant
SELECT
Id,
regexp_replace(Name, ',', '\'') as Name,
City,
Ranking,
Rating,
PriceRange,
NumberOfReviews
FROM
restaurant;
但它不起作用,它只是删除了第一行,而“坏”行不受影响。我也尝试添加正则表达式,但我的糟糕尝试并没有带来任何效果
我本以为:
regexp_replace(Name, ',', '\'') as Name,
成为:
regexp_replace(Name, ',', '\,') as Name,
你尝试过这个吗?