我有一個這樣的表:
/ *輸入* / -父孩子| | | - | - - - | - - - | - | 1 | 2 | - - - | 2 | 3 |——| | 3 | 4 | 5 | 6 | - - - | 6 | | - - - | 7 8 9 10 11 | | | - - - | |
我希望創建看起來像這樣:
/ *輸出* / - | |人first_ancestor | - - - | - - - | - - - - - - - - - - - - - - - - - - | - - - | 1 | 1 | - - - | 2 | 1 | - - - | 3 | 1 | - - - | 4 | 1 | - - - | 5 | 5 | - - - | 6 | 5 | - - - | 7 | 5 | - - - | 8 8 8 | | - - - | 9 | | - - - | 10 | | - - - | 11 10 | |
如果我是使用bigquery,使用遞歸CTE簡單
——遞歸CTE:每個記錄的第一個祖先與遞歸table_data(——填充數據選擇1作為家長,孩子聯盟都選擇2、3 union all選擇3,4 union all選擇5、6 union all選擇6,7 union all選擇8、9 union all選擇10,11),base_records為(,使基本情況(所有記錄,不是另一個記錄)的孩子,也有過濾循環的影響團體(例如1 - > 2 - > - > 1)first_ancestor選擇父母,父母作為人從table_data家長不是在(從table_data選擇孩子)),lookup_table(——首先從基本情況……第一個祖先選擇人,first_ancestor base_records工會——遞歸地添加的後代,後代選擇table_data注意的第一個祖先。孩子的人,lookup_table。從lookup_table first_ancestor加入table_data lookup_table。人= table_data。父)選擇的人,從lookup_table first_ancestor first_ancestor秩序,人
是1)有一些函數,遞歸的磚(sql或pyspark火花),或者2)規範的方法?
我蠻力通過編碼任意長度可以加入(加入table_data t1 table_data t2 table_data t3…)但是在想如果有一個低效的/動態的方式更少。我不懂圖形數據庫或者適當的解決方案在於他們。
非常感謝你
嗨@Jonathan Dufault,
遞歸cte,目前他們並不支持Apache火花(磚)。有一些解決方法可能幫助這樣一個由我的同事https://medium.com/@24chynoweth recursive-cte-on-databricks-2ac0dff8ca06或者稍微更新文章https://medium.com/globant/how-to-implement-recursive-queries-in-spark-3d26f7ed3bc9。
希望這有助於,LG
嗨@Jonathan Dufault,
遞歸cte,目前他們並不支持Apache火花(磚)。有一些解決方法可能幫助這樣一個由我的同事https://medium.com/@24chynoweth recursive-cte-on-databricks-2ac0dff8ca06或者稍微更新文章https://medium.com/globant/how-to-implement-recursive-queries-in-spark-3d26f7ed3bc9。
希望這有助於,LG
哇這完全回答我的問題。你有意義的東西是否會在某種程度上實現/是多麼重要或不?主要隻是好奇。
@Landan喬治
嘿,我看著同樣的問題,但是當我為CTE_Recursive執行有什麼建議的文章https://medium.com/globant/how-to-implement-recursive-queries-in-spark-3d26f7ed3bc9
我得到錯誤
錯誤的SQL語句:AnalysisException:表或視圖了CTE_Recursive;行x pos y;
我創建了相同的表作為文章的例子,甚至複製代碼和執行它所以我不做其他的事情。
你能請告知嗎?