为何Snowflake设置OFFSET为2时,查询输出仍从0开始?
Snowflake OFFSET设置后序列从0开始的原因

在Snowflake中执行以下查询时:
SELECT seq8() FROM table(generator(rowCount => 5)) limit 3 offset 2;
会出现OFFSET设为2,但输出结果从0开始的情况,核心原因是**seq8()的序列生成时机晚于OFFSET过滤**。
具体逻辑是:
- 首先
generator(rowCount => 5)生成5行空数据,但此时还未生成seq8()的值; - 接着查询先执行
OFFSET 2跳过前2行,再执行LIMIT 3保留剩余3行; - 最后才对这3行数据生成
seq8()序列,所以序列会从0开始计数,而非基于原始的5行数据集。
如果要实现基于原始数据集生成序列后再应用OFFSET,需要将序列生成逻辑提前到子查询/CTE中,示例查询如下:
SELECT seq FROM ( SELECT seq8() AS seq FROM table(generator(rowCount => 5)) ) t LIMIT 3 OFFSET 2;
此时结果会是2、3、4,符合OFFSET的预期效果。
内容的提问来源于stack exchange,提问作者Nupur
相关产品推荐
相关产品推荐

