【问题标题】:Calcite SQL does not recognize CONVERT_TIMEZONE in Apache BeamCalcite SQL 无法识别 Apache Beam 中的 CONVERT_TIMEZONE
【发布时间】:2021-08-28 15:17:35
【问题描述】:

我正在我的 Beam 管道中运行一个简单的 Sql 转换:

SELECT CONVERT_TIMEZONE('America/New York', 'UTC',(TIMESTAMP '1970-01-01 00:00:00' + OriginalTZ * INTERVAL '1' SECOND)) as MyUTC FROM PCOLLECTION

但我得到了错误:

 No match found for function signature CONVERT_TIMEZONE(<CHARACTER>, <CHARACTER>, <TIMESTAMP>)

但根据 Calcite 文档,语法是这样的。

我使用的是 Apache Beam 2.29 版。但是里面的Calcite sql版本似乎是2019年的旧版本2.20。

如何在 Calcite sql 中使用 CONVERT_TIMEZONE?

【问题讨论】:

    标签: sql apache-beam apache-calcite


    【解决方案1】:

    Apache Beam 目前使用 Calcite SQL 1.20,而 CONVERT_TIMEZONE 已添加到 1.21。

    一种解决方法是使用普通 ParDo 或 Map 来转换时区。如果您使用的是 Python,一些示例:Python Timezone conversion

    【讨论】:

      【解决方案2】:

      我确认这不起作用:https://github.com/apache/beam/pull/15010/files

      但是,您可以使用SqlTransform#registerUdf 添加您自己的(如果您愿意,您可以完全使用 Calcite 的 Apache 2.0 许可代码)。

      【讨论】:

      • 我最终使用了 UDF。为什么最新的 Beam 使用这么旧版本的 Calcite?
      • 是的。原因是 Calcite 在每次发布时都会进行很多的重大更改。有一些升级尝试从未完成。目前正在努力达到 1.26,github.com/apache/beam/pull/14729
      猜你喜欢
      • 1970-01-01
      • 2020-06-01
      • 2021-05-12
      • 1970-01-01
      • 2018-07-05
      • 2021-08-07
      • 1970-01-01
      • 2018-09-13
      • 1970-01-01
      相关资源
      最近更新 更多