CSV-файл в таблицу кустов с использованием данных загрузки - Как отформатировать дату в CSV, чтобы принять таблицы кустов - PullRequest
0 голосов
/ 31 января 2019

Я использую синтаксис загрузки данных для загрузки файла CSV в таблицу. Этот файл имеет тот же формат, что и улей.Но по-прежнему после выдачи данных загрузки последние 2 столбца возвращают нулевое значение при выборе.

1750,651,'2013-03-11','2013-03-17'
1751,652,'2013-03-18','2013-03-24'
1752,653,'2013-03-25','2013-03-31'
1753,654,'2013-04-01','2013-04-07'

create table dattable(
DATANUM    INT,  
ENTRYNUM BIGINT, 
START_DATE  DATE,
END_DATE    DATE ) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ;

 LOAD DATA LOCAL INPATH '/path/dtatable.csv' OVERWRITE INTO TABLE dattable ;

Выбор возвращает значения NULL для последних 2 столбцов

Другой вопрос заключался в том, что если формат даты отличаетсячем ГГГГ-ММ-ДД.можно ли улей определить формат?(Потому что сейчас я изменяю формат файла csv, чтобы принимать улей)

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Ответ на ваш второй вопрос:

Вам понадобится дополнительная временная таблица для чтения вашего входного файла, а затем вы сможете выполнить преобразование даты в своих операторах вставки и выбора. В вашем временномтаблица хранит поля даты в виде строки.Пример.

create table dattable_ext(
DATANUM    INT,  
ENTRYNUM BIGINT, 
START_DATE  String,
END_DATE    String) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

Загрузка данных во временную таблицу

LOAD DATA LOCAL INPATH '/path/dtatable.csv' OVERWRITE INTO TABLE dattable_ext;

Вставка из временной таблицы в управляемую таблицу.

insert into table dattable select DATANUM, ENTRYNUM,
from_unixtime(unix_timestamp(START_DATE,'yyyy/MM/dd'),'yyyy-MM-dd'),
from_unixtime(unix_timestamp(END_DATE,'yyyy/MM/dd'),'yyyy-MM-dd') from dattable_ext;

Формат даты можно заменить в unix_timestampфункция с введенным форматом даты.

0 голосов
/ 31 января 2019

LasySimpleSerDe (по умолчанию) не работает с цитируемым CSV.Используйте CSVSerDe :

create table dattable(
DATANUM    INT,  
ENTRYNUM BIGINT, 
START_DATE  DATE,
END_DATE    DATE ) 
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
   "separatorChar" = ",",
   "quoteChar"     = "'"
)  
STORED AS TEXTFILE;

Также прочтите это: CSVSerDe рассматривает все столбцы как тип String

Определите ваши столбцы даты как строку иприменить преобразование в избранном.

...