窗口与网格聚合函数对比
窗口聚合函数与网格聚合函数在概念上相似,但其关键区别在于区间表示方法的不同。
窗口聚合函数采用滑动窗口机制,即从输入序列中连续选取N个元素进行计算。
而网格聚合函数则将输入序列划分为若干固定区间,每个区间包含N个元素。
以一个包含12个元素的序列为例,当区间设定为7时:
grid_agg_avg
函数会分别计算{0,1,2,3,4,5,6}
和{7,8,9,10,11}
两组元素的平均值,window_agg_avg
函数则依次计算{0,1,2,3,4,5,6}
、{1,2,3,4,5,6,7}
、{2,3,4,5,6,7,8}
等子集的平均值,直至遍历整个序列,共产生12个结果。
值得注意的是,
grid_agg_avg
函数返回的结果序列仅包含两个元素,代表了对整个输入序列按指定区间划分后的聚合结果;window_agg_avg
窗口聚合函数返回的结果序列则由12个元素构成,这些元素是由7个元素组成的“滑动块”逐次移动所得,其中第一个区间的前6个元素因无法形成完整的7元素集合而被忽略。
此外,对于window_agg_avg
函数而言,“移动窗口”的表示方法存在差异,尤其是在处理少于窗口指定区间的元素数量时。
例如,在一个包含5个元素的序列中应用window_agg
函数,并设定区间为5,则前4个结果对应的窗口将基于1、2、3和4个实际元素值的不完整集合进行计算。
这一过程可参照下图所示:
其中破折号“-”表示不存在的元素,“0”代表替代值。在这种情况下,显然唯一有效的结果序列是最后一个(已突出显示),它有 5 个有效的输入值。
对于这前四个结果序列,没有所谓的“正确”表示方式。但重要的是,最先的(间隔 - 1) 个结果应被忽略,因为它们并不能代表一个完整的窗口。