我了解Imapla会解释相对于UTC时区的时间戳。我也知道有一个可以更改此行为的设置,以便impala解释相对于本地时区的时间戳。问题是我无法更改此设置。
是否有办法获得与在Impala中的Hive中获得的结果相同的结果?这是Hive的结果:
select from_unixtime(1521938294)
--> 2018-03-25 01:38:14
本地时区为Europe/Vienna
很好的问题。但是答案很棘手!我已经研究了一段时间,下面是我的答案。
您可以通过以下链接进行检查。
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
希望有帮助!