Presto конвертировать временную метку без часового пояса в эпоху - PullRequest
0 голосов
/ 08 октября 2019

Например, у меня есть строка времени '2012-10-31 01:00' (это UTC, но в самой строке нет кода часового пояса)

Как преобразовать ее вэпоха большое целое число?

Я перепробовал много версий, просто не повезло.

SELECT from_unixtime(cast('2012-10-31 01:00' as timestamp), 'Etc/UTC')
ERROR: function from_unixtime(timestamp without time zone, unknown) does not exist
  Hint: No function matches the given name and argument types. You might need to add explicit type casts.
  Position: 8

И

SELECT from_unixtime('2012-10-31 01:00', 'Etc/UTC')

Та же ошибка

1 Ответ

0 голосов
/ 08 октября 2019
  • Начните с преобразования в timestamp: CAST('2012-10-31 01:00' AS timestamp)
  • , затем сделайте timestamp with time zone: ... AT TIME ZONE 'UTC'
  • , затем перейдите в эпоху секунд (double): to_unixtime
  • , затем преобразуйте в эпоху миллис (bigint): CAST(... * 1000 AS bigint).

Все вместе:

presto:default> SELECT CAST(to_unixtime(CAST('2012-10-31 01:00' AS timestamp) AT TIME ZONE 'UTC') * 1000 AS bigint);
     _col0
---------------
 1351641600000
(1 row)

(протестировано на Presto 320)

Вы можете пока пропустить преобразование AT TIME ZONE 'UTC', но как только мы исправим семантику меток времени Presto , это понадобится. Поэтому я рекомендую иметь это в своем запросе.

...