递归SQL在Spark SQL中查找祖父母和子女

时间:2019-10-04 02:33:12

标签: apache-spark apache-spark-sql hierarchical-data

我正在处理关系数据,需要为所有孩子找到祖父母(最小生日)。我正在使用Spark 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;  

0 个答案:

没有答案