我如何在Impala中获得与荨麻疹from_unixtime相同的结果?

问题描述 投票:1回答:1

我了解Imapla会解释相对于UTC时区的时间戳。我也知道有一个可以更改此行为的设置,以便impala解释相对于本地时区的时间戳。问题是我无法更改此设置。

是否有办法获得与在Impala中的Hive中获得的结果相同的结果?这是Hive的结果:

select from_unixtime(1521938294)
--> 2018-03-25 01:38:14

本地时区为Europe/Vienna

hadoop hive impala
1个回答
0
投票

很好的问题。但是答案很棘手!我已经研究了一段时间,下面是我的答案。

  1. 您选择的日期和时间指向维也纳发生时移的时间。即时间提前了一个小时。

您可以通过以下链接进行检查。

HERE1

HERE2

  1. 来到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时间戳转换为欧洲/维也纳时间的工作,但是,由于现实生活中发生的时间偏移与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
希望有帮助!
© www.soinside.com 2019 - 2024. All rights reserved.