Отличный вопрос. Но ответ хитрый! Я изучал это некоторое время, и ниже мой ответ.
- Выбранные вами дата и время указывают на время, когда сдвиг времени происходит для Вены. время сдвигается вперед на один час.
Вы можете проверить это, используя ссылки ниже.
ЗДЕСЬ1
* 1014 здесь 2 *
Что касается преобразования времени в Impala без использования необходимых флагов, синтаксис будет выглядеть следующим образом:
select from_utc_timestamp(cast(from_unixtime(1521938294) AS TIMESTAMP), 'Europe/Vienna');
[OR]
select from_utc_timestamp('2018-03-25 00:38:14', 'Europe/Vienna');
2018-03-25 01:38:00 <---EXPECTED OUTPUT
2018-03-25 02:38:00 <---ACTUAL OUTPUT IN IMPALA
Приведенный выше синтаксис выполняет преобразование отметки времени Unix. в европейское / венское время, однако есть разница в разнице в один час в результате, как показано выше, из-за разницы между временным сдвигом, который происходит в реальной жизни, и преобразованием, которое происходит в Импале.
Причина:
Сдвиг времени в реальной жизни - 25 марта 2019 г. 01: 59: 59 , а затем 25 марта 2019 г. 03: 00: 00
Сдвиг времени в Импале - 25 марта 2019 г. 00: 59: 59 , а затем 25 марта 2019 г. 02: 00: 00
Несмотря на то, что в Impala, похоже, есть проблема с конверсией, приведенный выше синтаксис должен работать безупречно для любых дат в 2018 году, кроме 25 марта.
Для других дат:
select from_utc_timestamp('2018-03-26 00:38:14', 'Europe/Vienna')
2018-03-26 02:38:14 <---ACTUAL & CORRECT OUTPUT IN IMPALA
Надеюсь, это поможет!