RexCall无法在Apache Beam SQL中强制转换为RexInputRef异常

时间:2019-02-12 14:01:21

标签: google-cloud-dataflow apache-beam beam-sql

我正在尝试使用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及其遵循的格式,但我不知道如何处理它。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

有趣。您可以尝试IF条件吗?我希望这会起作用:

select T1.x from table T1 join table T2 on IF(T1.a = 'ABC', 'ABC',T1.b) = T2.c