#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