Как загрузить данные в таблицу улья, если в данных присутствует сам разделитель? - PullRequest
0 голосов
/ 04 мая 2018

Я загружаю данные в таблицу кустов, которая содержит запятую в самих данных.

input file:emp.csv 

101,deepak,kumar,das
102,sumita,kumari,das
103,rajesh kumar das

output :
id  name
101 deepak kumar das
102 sumita kumari das
103 rajesh kumar das

Когда я создал приведенную ниже таблицу кустов и загрузил данные, данные поступают неправильно:

 create external table hive_test(
 id int, name string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
STORED AS TEXTFILE
LOCATION '/hive_demo';

load data local inpath '/home/cloudera/hadoop/hive_demo/emp.csv' overwrite into table hive_test;

hive> select * from hive_test;
101 deepak
102 sumita
103 rajesh kumar das

Итак, я создал таблицу ниже, но она дает ошибку.

create external table hive_test1(
id int,
name string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES(
"separatorChar" = ",",
"quoteChar" = "'",
"escapeChar" = "\,")
STORED AS TEXTFILE
LOCATION '/hive_demo';
load data local inpath '/home/cloudera/hadoop/hive_demo/emp.csv' overwrite into table hive_test1;

select * from hive_test1;
Failed with exception 
java.io.IOException:org.apache.hadoop.hive.serde2.SerDeException: 
java.lang.UnsupportedOperationException: The separator, quote, and escape characters must be different!

Как загрузить данные в таблицу Hive?

1 Ответ

0 голосов
/ 04 мая 2018

Предоставление решения ниже при условии:

  • Вам всегда нужно извлечь только 2 столбца из csv.
  • Первый столбец числовой, второй столбец продолжается до конца строки после первого символа ','.
  • Вам необходимо заменить любой символ ',' в столбце name пробелами.

Используйте RegexSerDe для определения таблицы и загрузки

<code>create external table hive_test(
id int, name string)
ROW FORMAT SERDE '<b>org.apache.hadoop.hive.serde2.RegexSerDe</b>'
WITH SERDEPROPERTIES (
    "input.regex" = "<b>^(\d+),(.*)$</b>" -- 2 regex groups as per assumption
)
STORED AS TEXTFILE;
LOCATION '/path/to/table';
LOAD data local inpath '/path/to/local/csv' overwrite into table hive_test;

Заменить ',' в столбце name пробелом

<code>create table hive_test1 as 
select id, <b>regexp_replace(name, ',', ' ')</b> as name
from hive_test;

Затем, на select * from hive_test1, вы получите ниже:

101 Дипак Кумар дас
102 сумита кумари дас
103 Раджеш Кумар дас

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...