我了解Imapla会解释相对于UTC时区的时间戳。我也知道有一个可以更改此行为的设置,以便impala解释相对于本地时区的时间戳。问题是我无法更改此设置。
有没有办法获得与我在Impala的Hive中获得的结果相同的结果?
这是Hive结果:
select from_unixtime(1521938294)
--> 2018-03-25 01:38:14
当地时区为
Europe/Vienna
最佳答案
好问题。但是答案很棘手!我已经研究了一段时间,下面是我的答案。
您可以使用以下链接进行检查。
HERE1
HERE2
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时间戳转换为欧洲/维也纳时间的工作,但是,由于现实生活中发生的时间偏移与转换之间存在差异,因此上述结果的一小时差异有所不同这发生在Impala中。
原因:
现实生活中的时移-2019年3月25日01:59:59然后是2019年3月25日03:00:00
Impala的时移-2019年3月25日00:59:59然后是2019年3月25日02:00:00
即使Impala中似乎存在转换问题,但我上面提供的语法对于2018年中除3月25日以外的任何日期都应该可以正常使用。
其他日期:
select from_utc_timestamp('2018-03-26 00:38:14', 'Europe/Vienna')
2018-03-26 02:38:14 <---ACTUAL & CORRECT OUTPUT IN IMPALA
希望能帮助到你!