Как вставить даты из файла CSV, которые представлены в нескольких форматах, в столбец (тип данных которого - дата, т. Е. «Гггг-мм-дд») таблицы кустов - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь вставить данные из CSV-файла в таблицу кустов, где даты в CSV-файлах имеют такие форматы, как «мм / дд / гггг», «мм-дд-гггг», которые нужно вставить в кусттаблица в столбце с типом данных дата, т.е. «гггг-мм-дд».

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

create table sample1(order_id int, order_dt string);
load data local inpath "\home\cloudera\data.txt" into table sample1;

create table sample2(order_id int, order_dt date);   
insert into table sample2 select order_id, 
to_date(from_unixtime(unix_timestamp(order_dt,'mm/dd/yyyy'),'yyyy-mm-dd')) 
from sample1; 

csv файл:

order_id order_date

1 10/27/2016

2 10/27/2018

3 11/23/2016

4 09-23-2013

5 08-20-2010

6 05-13-2017

7 02/15/2009

выходпосле:

выберите * из sample2;

1 2016-10-27

2 2018-10-27

3 2016-11-23

4 NULL

5 NULL

6 NULL

7 2009-02-15

Здесь я получаю NULL для другихформат даты.

1 Ответ

0 голосов
/ 01 февраля 2019

Вы можете использовать функцию COALESCE здесь.если первая to_date функция возвращает ноль, то она выполняет второй аргумент, таким образом вы можете передать любое количество паттернов.

insert into table sample2 
select 
    order_id, 
    COALESCE(to_date(from_unixtime(unix_timestamp(order_dt,'mm/dd/yyyy'),'yyyy-mm-dd')),to_date(from_unixtime(unix_timestamp(order_dt,'mm-dd-yyyy'),'yyyy-mm-dd'))) 
from sample1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...