Snowflake执行SUM等分析函数报Cumulative window frame unsupported错误问询
Snowflake窗口函数「Cumulative window frame unsupported for function SUM」报错解决方案
根因定位
- 报错触发点为你SQL中
SUM函数对应的窗口帧配置:你使用了RANGE模式,同时指定窗口边界为UNBOUNDED PRECEDING AND 1 PRECEDING,不符合Snowflake的窗口帧使用限制。
规则说明
Snowflake对窗口帧的模式和边界有明确的约束:
RANGE模式仅支持累计窗口场景,仅允许两种边界写法:
BETWEEN UNBOUNDED PRECEDING AND CURRENT ROWBETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING带偏移量的边界(比如
1 PRECEDING/N FOLLOWING)属于滑动窗口场景,仅支持ROWS模式,不支持RANGE模式。
你当前的需求是计算当前行之前所有行的累计值,属于带偏移量的滑动窗口场景,不能使用RANGE模式。
修复方案
将SUM窗口帧中的RANGE关键字替换为ROWS即可,修改后SQL如下:
SELECT SUM( C_BIRTH_DAY ) OVER (PARTITION BY C_BIRTH_MONTH, C_BIRTH_YEAR ORDER BY NVL(C_BIRTH_COUNTRY,'COSTA RICA') ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS MAX1, MIN( C_BIRTH_DAY ) OVER ( PARTITION BY C_BIRTH_MONTH , C_BIRTH_YEAR ORDER BY NVL(C_BIRTH_COUNTRY,'COSTA RICA') ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS MIN1 FROM CUSTOMER;
如果你的业务场景确实需要使用RANGE模式,请调整窗口边界为上述累计窗口支持的格式,移除偏移量参数即可正常执行。
内容的提问来源于stack exchange,提问作者orellabac
相关产品推荐
相关产品推荐

