Преобразование из в метку времени в Улей или Импала - PullRequest
0 голосов
/ 05 июня 2019

Существует ли простой способ преобразования int в тип данных timestamp в Impala или Hive.

Я использую приведенный ниже код для преобразования int в timestamp, но я не считаю его эффективным способом.

20180520

CAST(concat(substring(CAST(datalake_date as string),1,4),'-',substring(CAST(datalake_date as string),5,2),'-',substring(CAST(datalake_date as string),7,2)) 
     AS TIMESTAMP)

--- Для извлечения Год ---

,date_part('Year',
CAST(concat(substring(CAST(datalake_date as string),1,4),'-',substring(CAST(datalake_date as string),5,2),'-',substring(CAST(datalake_date as string),7,2)) 
     AS TIMESTAMP)
          ) datalake_date

2018

Ответы [ 2 ]

0 голосов
/ 05 июня 2019

Используйте unix_timestamp(string date, string pattern) для преобразования заданной даты в формате в секунды, прошедшие с 1970-01-01.Затем используйте from_unixtime () для преобразования в требуемый формат :

select from_unixtime(unix_timestamp( '20180520','yyyyMMdd'),'yyyy-MM-dd');

Возвращает:

OK
2018-05-20
Time taken: 0.057 seconds, Fetched: 1 row(s)

Простой способ извлечь год с использованием substr:

select substr('20180520',1,4);
OK
2018
Time taken: 3.062 seconds, Fetched: 1 row(s)

Или после вышеупомянутого (см. Первый запрос) преобразования в стандартный формат улья 'yyyy-MM-dd' вы можете использовать year(), date_format functions

0 голосов
/ 05 июня 2019

Вы можете выполнить синтаксический анализ непосредственно в метку времени Unix, как это

select unix_timestamp('20180520', 'yyyyMMdd');

После этого у вас есть несколько пользовательских функций для манипулирования вашей датой, извлечения года, дня и т. Д. /

...