Как преобразовать рекурсивный запрос teradata в spark sql - PullRequest
0 голосов
/ 15 января 2019

Я пытаюсь преобразовать ниже Teradata SQL в Spark SQL, но не могу. Может кто-нибудь предложить решение?

create multiset table test1 as 
(
   WITH RECURSIVE test1 (col1, col2, col3) AS 
   (
      sel col11, col2, col3 
   from
      test2 root 
   where
      col3 = 1 
   UNION ALL
   SELECT
      indirect.col11,
      indirect.col2 || ',' || direct.col2 as col2,
      indirect.col3 
   FROM
      test1 direct,
      test2 indirect 
   WHERE
      direct.col1 = indirect.col11 
      and direct.col3 + 1 = indirect.col3 
   )
   sel col1 as col11,
   col2 
from
   test1 QUALIFY ROW_NUMBER() OVER(PARTITION BY col1 
ORDER BY
   col3 DESC) = 1 
)
with data primary index (col11) ;

Спасибо.

1 Ответ

0 голосов
/ 15 января 2019

Я попробовал подход сам, как изложено здесь http://sqlandhadoop.com/how-to-implement-recursive-queries-in-spark/ некоторое время назад.

Я не могу найти свою упрощенную версию, но этот подход - единственный способ сделать это в настоящее время. Я предполагаю, что в будущем для этого будет добавлена ​​поддержка Spark SQL - хотя ???

На дополнительном примечании: я видел себя в требовании разработать KPI в рамках этого подхода в то время как цикл. Я хотел бы предложить, чтобы рекурсивный цикл SQL, а также цикл while для генерации KPI не рассматривался как вариант использования для Spark, и, следовательно, это должно быть сделано в полностью ANSI-совместимой базе данных и при переводе результата в Hadoop - при необходимости.

...