Реализовать ROW_NUMBER () в beamSQL - PullRequest
0 голосов
/ 06 июня 2018

У меня есть следующий запрос:

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: Оператор: ROW_NUMBER пока не поддерживается!

Есть идеи, как реализовать ROW_NUMBER () в beamSql?

1 Ответ

0 голосов
/ 06 июня 2018

Вот один способ приблизить текущий запрос, не используя 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

Основная идея заключается в том, чтобы в первом подзапросе получить таблицу только с различными значениями Summed.Затем используйте коррелированный подзапрос, чтобы смоделировать номер строки.Это не очень эффективный метод, но если ROW_NUMBER недоступен, значит, вы застряли с какой-то альтернативой.

...