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

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

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

当地时区为Europe/Vienna

最佳答案

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

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

  • 您可以使用以下链接进行检查。

    HERE1

    HERE2
  • 在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
    

    希望能帮助到你!

    10-07 12:22