如何从HIVE(sql)的列中删除文本

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

我正在尝试从CSV文件(latlong.csv)导入数据,并且希望从列中删除所有引号。请参考第一张图片。

First image

这是我用来导入数据的代码

CREATE TABLE IF NOT EXISTS latlong
    (COUNTRY String, ALPHA2 String, ALPHA3 String, NUMERICCODE String,
    LATITUDE String, LONGITUDE String)
    ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\n'
    STORED AS TEXTFILE
    tblproperties("skip.header.line.count"="1");

LOAD DATA LOCAL INPATH '/tmp/project2/latlong.csv' INTO TABLE latlong; 

我尝试使用下面的命令,但出现错误。错误说我只能插入表中而不能更新它(我认为)。

Update latlong set country = replace(country, '"', '')

error message

sql database hive bigdata
1个回答
0
投票

要以非事务方式更新表,请使用INSERT OVERWRITE。双引号需要屏蔽。使用["]或双斜线\\"

insert overwrite table latlong
select regexp_replace(COUNTRY, '["]', '') COUNTRY, --this will remove double-qutes
       ALPHA2, ALPHA3, NUMERICCODE, LATITUDE, LONGITUDE
  from latlong;

如果字符串中包含引号并且要删除它们,则此解决方案适用。

如果像在数据示例中一样,用引号引起来,则在反序列化期间使用SerDe删除引号,这样会更加有效。只需使用适当的SerDe和属性创建表:

drop table latlong;

CREATE TABLE latlong
(COUNTRY String, ALPHA2 String, ALPHA3 String, NUMERICCODE String,
LATITUDE String, LONGITUDE String)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES 
(
"separatorChar" = ",",
"quoteChar"     = "\""
)  
STORED AS TEXTFILE
tblproperties("skip.header.line.count"="1");
;

LOAD DATA LOCAL INPATH '/tmp/project2/latlong.csv' INTO TABLE latlong; 
© www.soinside.com 2019 - 2024. All rights reserved.