Azure Data Factory窗口函数获取最近非空值问题咨询
问题原因
你当前的写法错误核心是last(Value, true())默认计算范围包含当前行,因此非空行都会取到自身的VALUE,不符合“取前序值”的要求。
解决方案
你只需要调整窗口函数的帧范围,限定计算范围仅包含当前行之前的所有行即可,参考Azure Data Factory数据流中的表达式写法:
last(VALUE, true()) OVER ( PARTITION BY ID ORDER BY DAY_ID ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING )
参数说明
- 第二个参数
true表示last函数忽略null值,仅统计非空的VALUE ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING定义窗口计算范围为:当前ID分区下,按DAY_ID升序排序后,从分区第一行到当前行的前一行,完全排除当前行,避免取到自身值
效果验证
按该逻辑计算你的示例数据,刚好可以得到你期望的PREVIOUS_VALUE结果:
- 20210101的行没有前序行,返回null
- 20210105的行遍历前序所有行,忽略中间的null值,取到最近的非空值2874442
注意事项
如果存在相同DAY_ID的多行数据,建议补充一个唯一副排序键(比如行号),保证排序顺序稳定,避免窗口计算结果出现随机偏差。
内容的提问来源于stack exchange,提问作者Leo
相关产品推荐
相关产品推荐

