[英]Depth in tree structure in BigQuery
我的數據如下所示:
| child_id | parent_id |
| 10 | Null |
| 13 | 10 |
| 15 | 13 |
| 11 | 10 |
| 16 | 11 |
| 19 | 15 |
這可以看成是一棵樹。 我現在要確定每個child_id的深度。 因此,示例應為:
| child_id | parent_id | depth |
| 10 | Null | 0 |
| 13 | 10 | 1 |
| 15 | 13 | 2 |
| 11 | 10 | 1 |
| 16 | 11 | 2 |
| 19 | 15 | 3 |
我想在BigQuery中解決此問題; 我不確定如何,因為我認為沒有人可以輕松地進行遞歸操作。 也許以某種方式將其傳遞給UDF可能是一種合理的方法。
我只是使用剛剛發布的“ BigQuery上的完整黑客新聞數據集”為此編寫了一個查詢。
這里的問題是,有些評論指向父故事,而其他評論則發布到父評論,並且很難通過它們搜索原始故事(因為這是遞歸操作)。 解決方法:
SELECT p0.id, s.id, s.title, level
FROM (
SELECT p0.id, p0.parent, p2.id, p3.id, p4.id, COALESCE(p7.parent, p6.parent, p5.parent, p4.parent, p3.parent, p2.parent, p1.parent, p0.parent) story_id,
GREATEST(IF(p7.parent IS null, -1, 7), IF(p6.parent IS null, -1, 6), IF(p5.parent IS null, -1, 5), IF(p4.parent IS null, -1, 4), IF(p3.parent IS null, -1, 3),
IF(p2.parent IS null, -1, 2), IF(p1.parent IS null, -1, 1), 0) level
FROM [fh-bigquery:hackernews.comments] p0
LEFT JOIN EACH [fh-bigquery:hackernews.comments] p1 ON p1.id=p0.parent
LEFT JOIN EACH [fh-bigquery:hackernews.comments] p2 ON p2.id=p1.parent
LEFT JOIN EACH [fh-bigquery:hackernews.comments] p3 ON p3.id=p2.parent
LEFT JOIN EACH [fh-bigquery:hackernews.comments] p4 ON p4.id=p3.parent
LEFT JOIN EACH [fh-bigquery:hackernews.comments] p5 ON p5.id=p4.parent
LEFT JOIN EACH [fh-bigquery:hackernews.comments] p6 ON p6.id=p5.parent
LEFT JOIN EACH [fh-bigquery:hackernews.comments] p7 ON p7.id=p6.parent
HAVING level=0
LIMIT 100
) a
LEFT JOIN EACH [fh-bigquery:hackernews.stories] s
ON s.id=a.story_id
(擁有這么多的左聯接會消耗大量資源,因此要大規模運行它,我會尋找不同的策略)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.