【问题标题】:RexCall cannot be cast to RexInputRef exception in Apache Beam SQLRexCall 无法在 Apache Beam SQL 中转换为 RexInputRef 异常
【发布时间】: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 及其遵循的格式,但我不知道如何处理它。

有人可以帮忙吗?

【问题讨论】:

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


【解决方案1】:

有趣。你可以试试IF 调理吗?我希望这会奏效:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 2021-12-14
    相关资源
    最近更新 更多