Улей — преобразование времени эпохи (мс — 13 цифр) в отметку времени до миллисекунд в hive sql

#sql #hive #hiveql #hortonworks-data-platform #epoch

#sql #улей #hiveql #hortonworks-платформа данных #эпоха

Вопрос:

Мне нужно получить заполненную временную метку из метки времени эпохи в запросе улья.

 For example 
epoch time      --- 1606407266850
timestamp value --- 2020-11-26 21:44:26 
expected value  --- 2020-11-26 21:44:26.850
 

Мой метод в улье:

 Select timestamp(concat(from_unixtime(CAST(lastModifiedOn AS BIGINT),'yyyy-MM-dd HH:mm:ss'),".",CAST(lastModifiedOn AS BIGINT)%1000),'yyyy-MM-dd HH:mm:ss.SSS')
from db.table1
 

Мой вопрос: есть ли у нас лучший подход для получения значения временной метки до миллисекунды? мы можем легко получить значение до секунды.

Ответ №1:

 select cast(lastModifiedOn/1000 as timestamp);
 

Невозможно указать точность, но метка времени будет сохранена с максимальной точностью

Комментарии:

1. Спасибо mck, пожалуйста, найдите комментарий ниже select cast(cast('1606407266850' AS BIGINT)/1000 as timestamp) ms,-- Giving correct results with ms (2020-11-26 16:14:26.85 ) cast(cast('1606476624' AS BIGINT) as timestamp) sec; -- wrong results (1970-01-19 14:14:36.624) , можем ли мы что-то сделать с эпохой времени в секунду

2. Стандартное время эпохи основано на секундах. Ваше нестандартное время эпохи 1606407266850 основано на миллисекундах, а 1606476624 основано на секундах. У вас не может быть формулы, которая вычисляет правильную временную метку для обоих значений, если вы не выполните case when