Как удалить текст из столбцов в HIVE (sql)

Я пытаюсь импортировать данные из файла CSV (latlong.csv) и хочу удалить все кавычки из своих столбцов. Пожалуйста, обратитесь к первому изображению.

Первое изображение

Это код, который я использовал для импорта данных

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, '"', '')

сообщение об ошибке


person Alex    schedule 30.11.2019    source источник
comment
Помогает ли этот ответ? Как заменить символы в Hive   -  person ldz    schedule 01.12.2019


Ответы (1)


Чтобы обновить таблицу, которая не находится в режиме транзакций, используйте INSERT OVERWRITE. Двойная кавычка нуждается в защите. Используйте ["] или двойную косую черту \\":

insert overwrite table latlong
select regexp_replace(COUNTRY, '["]', '') COUNTRY, --this will remove double-qutes from COUNTRY column
       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; 

SerDe удалит кавычки во время выбора, не нужно обновлять таблицу.

person leftjoin    schedule 01.12.2019