簡體   English   中英

BigQuery中樹狀結構的深度

[英]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

(擁有這么多的左聯接會消耗大量資源,因此要大規模運行它,我會尋找不同的策略)

https://news.ycombinator.com/item?id=10440502

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM