【发布时间】:2019-02-12 14:01:20
【问题描述】:
我正在尝试使用 Beam SQL 进行简单连接,但在编译时出现异常:
Exception in thread "main" java.lang.ClassCastException: org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.rex.RexCall cannot be cast to org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.rex.RexInputRef
连接类似于:
select T1.x from table1 T1 join table2 T2
on
(case when T1.a = 'ABC' then 'ABC' else T1.b end = T2.c)
在 BigQuery 中执行此条件时可以正常工作(尝试作为健全性检查)。不知道为什么它会破坏 Beam SQL。我什至尝试使用 Beam SQL UDF,但它也没有帮助。我认为这是因为 Apache Calcite 及其遵循的格式,但我不知道如何处理它。
有人可以帮忙吗?
【问题讨论】:
-
我认为目前 Beam SQL 不支持这样的功能。只有字段相等连接才能工作。
CASE应该在SELECT中工作,所以你可以在表和选择之间将其建模为JOIN,类似于:github.com/apache/beam/blob/master/sdks/java/testing/nexmark/… -
有一个与此异常相关的 JIRA:jira.apache.org/jira/browse/BEAM-6112。对它的贡献肯定会非常受欢迎。
标签: google-cloud-dataflow apache-beam beam-sql