; WITH Hierarchy as
(
select distinct PersonnelNumber
, Email
, ManagerEmail
from dimstage
union all
select e.PersonnelNumber
, e.Email
, e.ManagerEmail
from dimstage e
join Hierarchy as h on e.Email = h.ManagerEmail
)
select * from Hierarchy
您能否帮助在SPARKSQL中实现同样的目标
4条答案
按热度按时间ffscu2ro1#
现在已经很晚了,但是今天我尝试使用PySpark SQL实现cte递归查询。
这里,我有一个简单的 Dataframe ,我想做的是找到每个ID的最新ID。
原始 Dataframe :
我想要的结果:
下面是我的代码:
Databricks notebook screenshot
我知道表演很糟糕,但至少,它给予了我需要的答案。
这是我第一次发布StackOverflow的答案,所以如果我犯了任何错误,请原谅我。
sdnqo3pr2#
使用SPARK SQL是不可能的,WITH子句是存在的,但不适用于CONNECT BY,比如ORACLE,或者DB2中的递归。
mf98qq943#
The Spark documentation提供了“CTE定义中的CTE”。复制如下:
您可以将其扩展到多个嵌套查询,但语法很快就会变得很笨拙。我的建议是使用注解来明确下一个select语句的来源。本质上,从第一个查询开始,并根据需要在其上方和下方放置其他CTE语句:
tpxzln5u4#
你可以递归地使用
createOrReplaceTempView
来构建一个递归查询,它不会很快,也不会很漂亮,但是它很有效,下面是@Prade的例子,PySpark:然后:
图纸: