Рекурсивный SQL, чтобы найти деда и ребенка в искровой SQL - PullRequest
0 голосов
/ 04 октября 2019

Я работаю с данными об отношениях и мне нужно найти дедушку (с минимальной датой рождения) для всех детей. Я использую спарк 1.6

Ввод

parent child DOB 
A       B     1
B       C     2
C       D     3
P       Q     1
Q       R      2

Output
parent   child  Oldest
A         B       A
B         C       A
C         D       A
P         Q       P  
Q         R       P

Ниже sql решает проблему, но с большим набором данных он принимает столько исполнителей

Step-1
select A.parent, A.child
,CASE WHEN A.DOB < B.DOB THEN A.parent
WHEN A.DOB > B.DOB THEN B.parent 
ELSE A.parent
END AS oldest , A.DOB
FROM test_tbl A
left Join test_tbl B
ON B.child = A.parent


Step-2
while loop till no diff between prev_df and curr_df. I am using except to find diff.

select A.parent, A.child
,CASE WHEN A.DOB < B.DOB THEN A.oldest
WHEN A.DOB > B.DOB THEN B.oldest 
ELSE A.parent
END AS oldest , A.DOB
FROM crp_temp_rdm_uat7.fac_loop_1 A
left Join crp_temp_rdm_uat7.fac_loop_1 B
ON B.child = A.parent;  
...