问题描述
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?
解决方法
Apache Beam 目前使用 Calcite SQL 1.20,而 CONVERT_TIMEZONE
已添加到 1.21。
一种解决方法是使用普通 ParDo 或 Map 来转换时区。如果您使用的是 Python,一些示例:Python Timezone conversion.
,我确认这不起作用:https://github.com/apache/beam/pull/15010/files
但是,您可以使用 SqlTransform#registerUdf
添加自己的代码(如果您愿意,也可以使用 Calcite 的 Apache 2.0 许可代码)。