Как загрузить 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");