Получите миллисекунду от Timestamp im Impala

У меня есть запрос, в котором мне нужно извлечь временную метку с миллисекундами, чтобы сопоставить данные из источника. Ниже приведены образцы данных с SQL-сервера (Источник), а столбец определен как Datetime.

U_Date
2007-10-26 10: 07: 00.000
2005-05-04 11: 12: 54.297
2004-05-29 03: 56: 24.792

Целью является Hadoop через Impala и определяется как отметка времени.

U_Date
26.10.2007, 10:07:00
2005-05-04 11: 12: 54.297000000
2013-05-31 04:07:00
2013-11-01 15: 34:00

Я ищу запрос для получения метки времени, отображаемой в источнике с миллисекундами. Я собрал свой запрос, как показано ниже, но по умолчанию он равен 000 миллисекунд.

выберите from_unixtime (unix_timestamp (u_date), 'yyyy-MM-dd HH: mm: ss.SSS') из таблицы A

Сгенерированный набор результатов выглядит следующим образом:

2007-10-26 10: 07: 00.000
2005-05-04 11: 12: 54.000 (Миллисекунды 0,297 по умолчанию равно 000)
2013-05-31 04: 07: 00.000
2013-11 -01 15: 34: 00.000

Пожалуйста, поделитесь своими впечатлениями


person Pallavi    schedule 24.10.2017    source источник


Ответы (2)


Чтобы получить отформатированную метку времени до 3-х значных миллисекунд, вы можете использовать функцию from_timestamp

SELECT from_timestamp(u_date, 'yyyy-MM-dd HH:mm:ss.SSS') FROM table;

функция unix_timestamp каким-то образом отбрасывает информацию о миллисекундах, в то время как функция from_unixtime, похоже, не очень хорошо интерпретирует временные метки unix с миллисекундами.

(проверено на Impala v2.9.0)

person etopylight    schedule 25.10.2017

Если у вас есть временная метка Unix, хранящаяся в вашей базе данных с миллисекундами

Примерно так 1525245791828

и вы хотите удалить миллисекунды из этого поля, чтобы можно было выполнять сравнение временных меток Unix.

Вы можете сделать что-то вроде этого:

cast((you_unix_timestamp_with_milliseconds_column/1000) as BIGINT)
person Abdelrahman Aly    schedule 08.05.2018