【问题标题】:row_number in Apache Beam SQLApache Beam SQL 中的 row_number
【发布时间】:2020-04-19 12:24:57
【问题描述】:

我正在尝试使用带有以下代码的 Apache Beam SQL 生成 row_number

PCollection<Row> rwrtg =
        PCollectionTuple.of(new TupleTag<>("trrtg"), rrtg)
                        .apply(SqlTransform.query("select appId, row_number() over (partition by appId order by rating asc) as issue_rank from trrtg"));

但出现以下错误:

java.lang.RuntimeException: cannot translate call ROW_NUMBER() OVER (PARTITION BY $t0 ORDER BY $t1 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)

您能告诉我如何解决这个问题吗?

【问题讨论】:

    标签: apache-beam beam-sql


    【解决方案1】:

    Beam SQL 支持两种方言:-

    1. Beam Calcite - 有关支持的运算符的详细信息,请参见 here
    2. ZetaSQL - 有关支持的运算符的详细信息,请参见 here

    目前这两种方言都不支持 row_number() 分析功能。因此你得到了错误。

    【讨论】:

    • 如果我需要 row_number() 我们如何在 Beam SQL 中生成,我们可以使用 udaf 吗?请问有什么建议吗?
    • 请注意,BeamSQL 已经开始支持 OVER 和 window 子句:issues.apache.org/jira/browse/BEAM-9198。有了这种语法支持,BeamSQL 可以在短期内实现 row_number()。
    • 下表列出了计划实现的功能:docs.google.com/document/d/…
    猜你喜欢
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多