Как загрузить CSV-данные, заключенные в двойные кавычки и разделенные вкладкой в ​​таблицу HIVE?

Я пытаюсь загрузить данные из файла csv, в котором значения заключены в двойные кавычки "и вкладка" \ t". Но когда я пытаюсь загрузить это в куст, он не бросает никаких ошибок, и данные загружаются без какой-либо ошибки, но я думаю, что все данные загружаются в один столбец и большинство значений, отображаемых как NULL. ниже приводится инструкция create table.

CREATE TABLE example
(
organization  STRING,
order BIGINT,
created_on  TIMESTAMP,
issue_date TIMESTAMP,
qty  INT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t' 
ESCAPED BY '"'
STORED AS TEXTFILE;

Пример входного файла -

 "Organization" "Order"  "Created on"   "issue_date"   "qty"
 "GB"   "111223"    "2015/02/06 00:00:00"   "2015/05/15 00:00:00"   "5"
 "UK"   "1110"  "2015/05/06 00:00:00"   "2015/06/1 00:00:00"   "51"

и оператор Load для ввода данных в таблицу hive.

 LOAD DATA INPATH '/user/example.csv' OVERWRITE INTO TABLE example

В чем может быть проблема и как я могу игнорировать заголовок файла. и если я удалю ESCAPED BY '' 'из инструкции create, ее загрузку в соответствующие столбцы, но все значения заключаются в двойные кавычки. Как удалить двойные кавычки из значений и игнорировать заголовок файла?

Ответы

Ответ 1

Теперь вы можете использовать OpenCSVSerde, который позволяет вам определить символ разделителя и легко избежать окружающих двойных кавычек:

CREATE EXTERNAL TABLE example (
   organization  STRING,
   order BIGINT,
   created_on  TIMESTAMP,
   issue_date TIMESTAMP,
   qty  INT
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
   "separatorChar" = "\t",
   "quoteChar"     = "\""
)  
LOCATION '/your/folder/location/';

Ответ 2

Вы не хотите использовать escaped by, что для escape-символов, а не для кавычек символов. Я не думаю, что у Hive фактически есть поддержка персонажей цитат. Вы можете посмотреть этот csv serde, который принимает свойство quotechar.

Также, если у вас есть HUE, вы можете использовать диспетчер metastore webapp для загрузки CSV, это будет касаться строки заголовка, типов данных столбцов и т.д.

Ответ 3

"В настоящее время в Hive включен OpenCSVSerde, который будет правильно анализировать эти поля с кавычками, не добавляя дополнительных банок или подверженных ошибкам и медленного регулярного выражения."

ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'

источник = Бен Доерр

Как обрабатывать поля, заключенные в кавычки (CSV) при импорте данных из S3 в DynamoDB с использованием EMR/Hive

Ответ 4

Используйте CSV Serde для создания таблицы. Я создал таблицу в улье следующим образом, и она работает как прелесть.

CREATE EXTERNAL TABLE IF NOT EXISTS myTable (
id STRING,
url STRING,
name STRING
)
row format serde 'com.bizo.hive.serde.csv.CSVSerde'
with serdeproperties ("separatorChar" = "\t")
LOCATION '<folder location>';

Ответ 5

Вы можете использовать CSV serde "csv-serde-1.1.2.jar" для загрузки файла без двойных кавычек.

ссылка для скачивания:

http://ogrodnek.github.io/csv-serde/

и оператор create table как

CREATE TABLE <table_name> (col_name_1 type1, col_name_2 type2, ...) row format serde 'com.bizo.hive.serde.csv.CSVSerde';

вы можете удалить заголовок со следующим свойством в таблице создания stmt

tblproperties ("skip.header.line.count"="1");