代码之家  ›  专栏  ›  技术社区  ›  Nagesh Singh Chauhan

在beamsql中实现行数

  •  1
  • Nagesh Singh Chauhan  · 技术社区  · 7 年前

    我有以下疑问:

    SELECT DISTINCT Summed, ROW_NUMBER () OVER (order by Summed desc) as Rank  from table1
    

    我必须用apache beam(beamsql)编写它。以下是我的代码:

    PCollection<BeamRecord> rec_2_part2 = rec_2.apply(BeamSql.query("SELECT DISTINCT Summed, ROW_NUMBER(Summed) OVER (ORDER BY Summed) Rank1 from PCOLLECTION "));
    

    但我得到了以下错误:

    原因:java.lang.unsupportedoperationexception:operator:row_number尚不受支持!

    知道如何在beamsql中实现row_number()吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Tim Biegeleisen    7 年前

    下面是一种不用使用 ROW_NUMBER :

    SELECT
        t1.Summed,
        (SELECT COUNT(*) FROM (SELECT DISTINCT Summed FROM table1) t2
         WHERE t2.Summed >= t1.Summed) AS Rank
    FROM
    (
        SELECT DISTINCT Summed
        FROM table1
    ) t1
    

    基本思想是首先使用子查询来获得一个只有DISTINCT的表 Summed 价值观。然后,使用相关子查询来模拟行号。这不是一个非常有效的方法,但是如果 罗氏数 是不可用的,那你就只能选择了。