【问题标题】:Can you use a column for the timezone parameter of AT TIME ZONE in Presto / Athena?您可以在 Presto / Athena 中为 AT TIME ZONE 的时区参数使用一列吗?
【发布时间】:2019-02-26 00:12:26
【问题描述】:

这是您可以在 Athena 中执行的操作-

SELECT date_utc AT TIME ZONE 'America/Chicago'
FROM
(
  SELECT TIMESTAMP '2018-09-09 12:00:00' as date_utc

) x;

在其他 sql 引擎中,您可以将 America/Chicago 更改为列-

SELECT date_utc AT TIME ZONE x.timezone
FROM
(
  SELECT
    TIMESTAMP '2018-09-09 12:00:00' as date_utc,
    'America/Chicago' as timezone

) x;

在雅典娜你得到-

第 1:30 行:在输入“时区 x”处没有可行的替代方案

应该可以在 Athena 中使用x.timezone 吗?这似乎是一个错误。

【问题讨论】:

标签: sql amazon-web-services amazon-athena presto


【解决方案1】:

它确实看起来像是引擎中的一个错误。然而有趣的是,底层函数使用列参数。因此,您可以将其用作解决方法。

SELECT at_timezone(date_utc,x.timezone)
FROM
(
  SELECT
    TIMESTAMP '2018-09-09 12:00:00' as date_utc,
    'America/Chicago' as timezone

) x;

【讨论】:

  • 感谢您的帮助!我担心这个问题太小众而无法得到回复,而且 AWS 论坛本身就是一个废话
【解决方案2】:

在上面的正确答案中添加一些额外的上下文: AT_TIMEZONE 函数未记录在 presto 文档中。当有人使用 timestamp AT time zone tz 时,它实际上是被调用的 AT_TIMEZONE 函数。它似乎是一个内部功能,有些人已经在使用它。这是一个讨论它的问题:https://github.com/prestodb/presto/issues/5162

语法似乎是AT_TIMEZONE(date_field, tz_field_or_string)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-12
    • 2021-11-30
    • 2011-03-14
    • 2015-09-28
    • 1970-01-01
    • 2021-08-24
    • 1970-01-01
    相关资源
    最近更新 更多