在 hive 中加载一个以逗号作为分隔符的 csv,其中一列不带引号的字符串可以在其中包含逗号

问题描述 投票:0回答:1

目标:将给定的

.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;

但它不起作用,它只是删除了第一行,而“坏”行不受影响。我也尝试添加正则表达式,但我的糟糕尝试并没有带来任何效果

csv hive delimiter
1个回答
0
投票

我本以为:

regexp_replace(Name, ',', '\'') as Name,

成为:

regexp_replace(Name, ',', '\,') as Name,

你尝试过这个吗?

© www.soinside.com 2019 - 2024. All rights reserved.