Как преобразовать UT C в метку времени CST, сохранив миллисекунды в данных в Hive - PullRequest
1 голос
/ 21 января 2020

У меня есть таблица улья, в которой данные с отметкой времени типа данных имеют формат UT C. Я создал вид сверху этой таблицы для преобразования UTC в CST с переходом на летнее время. Это преобразование работает нормально. Но в данных отсутствуют миллисекунды.

Приведенный ниже лог c используется для преобразования UT C в CST

FROM_UTC_TIMESTAMP(UNIX_TIMESTAMP(added_date, 'yyyy-MM-dd HH:mm:ss.SSS') * 1000, 'CST6CDT')

Пожалуйста, помогите мне преобразовать UTC до CST, включая миллисекунды в метке времени.

1 Ответ

0 голосов
/ 21 января 2020

Функция unix_timestamp () игнорирует миллисекунды . возвращает секунды, прошедшие с unix эпохи. Миллисекунды потеряны. Например:

 select FROM_UTC_TIMESTAMP(UNIX_TIMESTAMP('2020-01-21 15:15:35.125', 'yyyy-MM-dd HH:mm:ss.SSS') * 1000, 'CST6CDT');

возвращает:

2020-01-21 09:15:35

Если метка времени имеет правильный формат 'гггг-мм-дд ЧЧ: мм: сс.ССС' (и в вашем примере, согласно шаблону, не требует преобразования), это прекрасно работает:

with s as (select '2020-01-21 15:15:35.125' as added_date) 

select FROM_UTC_TIMESTAMP(s.added_date, 'CST6CDT')  from s;

Результат:

2020-01-21 09:15:35.125

А если отметка времени в формате, который требует преобразования , обходной путь - извлечь миллисекунды из исходной временной метки и добавить к миллисекундам, которые вы получили после умножения unix_timestamp на 1000:

with s as (select '2020-01-21 15:15:35.125' as added_date) 

select FROM_UTC_TIMESTAMP(UNIX_TIMESTAMP(s.added_date, 'yyyy-MM-dd HH:mm:ss.SSS') * 1000+cast(split(added_date,'\\.')[1] as int), 'CST6CDT')  from s;

Результат:

2020-01-21 09:15:35.125

Еще один обходной путь - объединить с миллисекундами:

with s as (select '2020-01-21 15:15:35.125' as added_date) 

select concat_ws('.',cast(FROM_UTC_TIMESTAMP(UNIX_TIMESTAMP(s.added_date, 'yyyy-MM-dd HH:mm:ss.SSS') * 1000, 'CST6CDT') as string),split(added_date,'\\.')[1]) from s;

Результат:

2020-01-21 09:15:35.125
...