运行递归查询时如何打破雪花中的循环

Posted

技术标签:

【中文标题】运行递归查询时如何打破雪花中的循环【英文标题】:How to break cycles in Snowflake when running recursive queries 【发布时间】:2020-04-03 14:44:42 【问题描述】:

我正在使用 CONNECT BY 子句在雪花中运行分层查询,格式为

SELECT
       CONNECT_BY_ROOT field_a
     , field_a
     , SYS_CONNECT_BY_PATH (field_b, '/') AS path_
FROM my_table
START WITH field_a 
CONNECT BY  PRIOR  field_b =  field_a;

问题是我的表有一些循环,并且雪花在 100 次迭代后停止或从未完成查询。 有没有像 Oracle 那样用 NOCYCLE 子句打破循环?

【问题讨论】:

【参考方案1】:

Snowflake 文档通常非常好。我建议先看看那里。此特定主题包含在此处的 CONNECT BY 函数文档中:

https://docs.snowflake.com/en/sql-reference/constructs/connect-by.html#usage-notes

很遗憾,看来迭代限制是帮助您解决此问题的唯一方法,因为目前不支持 NOCYCLE。

【讨论】:

请问您是否知道 Snowflake 是否计划很快支持NOCYCLE

以上是关于运行递归查询时如何打破雪花中的循环的主要内容,如果未能解决你的问题,请参考以下文章

如何打破递归函数内的 for 循环并在 Javascript 中返回?

DB for z/OS 中的递归查询

MYSQL 8.019 CTE 递归查询怎么解决死循环三种方法

oracle 递归 通过子节点查询根节点

SQL Server 树形表非循环递归查询

Java算法之递归打破及在真实项目中的使用实例