Как запустить подзапрос с предложением о неравенстве в Spark? - PullRequest
1 голос
/ 13 февраля 2020

У меня есть этот запрос, и я хочу выполнить его на spark

SELECT A.PFR,
       A.MFR,
       A.MST,

  (SELECT COUNT(*)
   FROM Table1 T2
   WHERE T1.PFR = T2.PFR
     AND T1.MFR = T2.MFR
     AND T1.MST >= T2.MST) AS RANK
FROM Table1 A

Но spark не поддерживает подзапрос с предложением о неравенстве

Я получаю эту ошибку

Коррелированный скалярный подзапрос может содержать только предикаты равенства

Поэтому я попытался использовать group by, но не получил правильных результатов (у меня есть входные и выходные результаты)

SELECT A.PFR,
       A.MFR,
       A.MST,
       B.countRank
FROM Table1 A
LEFT OUTER JOIN
  (SELECT PFR,
          MFR,
          MST,
          COUNT(MFR) countRank
   FROM Table1 B
   GROUP BY PFR,
            MFR,
            MST) B ON B.PFR = A.PFR

Существует метод для преобразования этого запроса в запрос соединения.

Заранее спасибо.

1 Ответ

0 голосов
/ 13 февраля 2020

Просто используйте rank():

SELECT A.PFR, A.MFR, A.MST,
       RANK() OVER (PARTITION BY PFR, MFR
                    ORDER BY MST DESC
                   ) as rank
FROM Table1 A;

Если rank() не выполняет именно то, что вы хотите, то, возможно, row_number() или dense_rank() работают.

...