我了解 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 时间戳转换为欧洲/维也纳时间,但是由于现实生活中发生的时间偏移与转换之间的差异,结果中的一小时差异如上所示这发生在黑斑羚。
原因:
现实生活中的时移 - 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
希望能帮助到你!
关于hadoop - 如何在 Impala 中获得与 Hives from_unixtime 相同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60229146/