雪花数据库中的深度优先搜索

问题描述 投票:0回答:1

我有一个 skowflake 数据库,其中包含下表,其中包含列

PARENT_ID
ITEM_ID
ORDER
。该表反映了文件系统的内容,其中项目是文件或文件夹,
PARENT_ID
是每个项目的父项目。
order
是每个项目在其父项中的位置。例如,此树显示了项目之间的层次结构,之后的表显示了关系:

starting table

我的目标是基于深度优先搜索以特定顺序检索项目 id。它的意思是这样的桌子:

resulting table

Snowflake不支持命令

SEARCH DEPTH FIRST BY ID SET DFS
。我认为它可以利用信息级别、位置、父位置,但到目前为止我还没有找到解决方案。

否则,我还尝试过做其他事情:通过 API,我设法获得了项目的最终排序,因此我有以下信息:item_id、排序的数组。我不知道如何在检索最终表的查询中传递此信息。

sql snowflake-cloud-data-platform hierarchy depth-first-search
1个回答
0
投票

我不确定这里的性能,但您可以在递归 CTE 中构建每个项目的路径(基于深度和顺序),然后在该路径上排序将为您提供深度优先搜索。

with cte as (
    select parent_id, item, 0 as depth, [depth||','||ord] arr
    from mytable x
    where parent_id is null
union all
    select x.parent_id, x.item, c.depth+1, array_append(c.arr, c.depth+1||','||x.ord)
    from cte c 
    join mytable x
        on c.item = x.parent_id
)

select item
from cte
order by arr
© www.soinside.com 2019 - 2024. All rights reserved.