首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在雪花中增加最大迭代次数?

如何在雪花中增加最大迭代次数?
EN

Stack Overflow用户
提问于 2020-11-15 14:36:14
回答 2查看 2.3K关注 0票数 2

当我用雪花写下面的代码时,我得到了错误。

代码语言:javascript
复制
set start_date = '2020-08-01'::TIMESTAMP_NTZ(9);
set end_date = '2020-11-30'::TIMESTAMP_NTZ(9);

WITH DateTable AS (
    SELECT $start_date AS MyDate
    UNION ALL
    SELECT DATEADD(DAY, 1, MyDate) FROM DateTable WHERE MyDate < $end_date
)
SELECT * FROM DateTable; 

错误信息如下..。

代码语言:javascript
复制
Recursion exceeded max iteration count (100)

似乎没有办法增加我自己的最大迭代次数。

我怎样才能增加介入次数的限制?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-15 16:13:02

使用生成器的非递归版本

代码语言:javascript
复制
SET (start_date,end_date)=('2020-08-01'::TIMESTAMP_NTZ(9),'2020-11-30'::TIMESTAMP_NTZ(9));
SET c = (SELECT DATEDIFF(DAY, $start_date, $end_date));

SELECT DATEADD(DAY, c.n, $start_date) AS calc_date
FROM(SELECT ROW_NUMBER() OVER (ORDER BY 1) - 1 FROM TABLE(generator(rowcount=>$c))) c(n);

解释:

变量c保存开始日期/结束日期之间的天数,是生成器的输入。生成器返回指定的行数。ROW_NUMBER() OVER() - 1窗口函数返回从0开始的连续数字,这些数字被添加到start_date中。

票数 4
EN

Stack Overflow用户

发布于 2020-11-15 14:45:56

看起来,最大迭代并不容易修改。The 文件上说

理论上,不正确地构造递归CTE会导致无限循环。实际上,雪花通过限制递归子句在单个查询中执行的迭代次数来防止这一点。The MAX_RECURSIONS参数限制迭代次数。 若要更改您的帐户的MAX_RECURSIONS,请联系雪花支持。

对于特定的用例,可以通过更改查询的逻辑来绕过限制。您实际上并不需要递归来实现您的目标;相反,您可以使用窗口函数和任何作为足够多行的表,比如bigtable(col)

代码语言:javascript
复制
select dateadd(day, x.rn - 1, $start_date) as mydate
from (select row_number() over (order by col) rn from bigtable) x
where dateadd(day, x.rn - 1, $start_date) <= $end_date
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64845646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档