SimpleAggregateFunction 类型
描述
SimpleAggregateFunction 数据类型用于存储聚合函数的中间状态,但不会像 AggregateFunction 类型那样存储其完整状态。
此类优化适用于满足以下性质的函数:
将函数
f应用于行集S1 UNION ALL S2的结果,可以通过分别对行集的各个部分应用f,然后再对这些结果应用一次f获得:f(S1 UNION ALL S2) = f(f(S1) UNION ALL f(S2))。
该性质保证仅使用部分聚合结果就足以计算出合并后的结果,因此无需存储和处理额外数据。例如,min 或 max 函数在从中间结果计算最终结果时不需要额外步骤;而 avg 函数则需要同时记录总和与计数,在最终的 Merge 步骤中合并中间状态后,再将两者相除即可得到平均值。
聚合函数的值通常是通过调用在函数名后追加 -SimpleState 组合器的聚合函数来生成的。
语法
参数
aggregate_function_name- 聚合函数名称。Type- 聚合函数参数类型。
支持的函数
支持以下聚合函数:
anyany_respect_nullsanyLastanyLast_respect_nullsminmaxsumsumWithOverflowgroupBitAndgroupBitOrgroupBitXorgroupArrayArraygroupUniqArrayArraygroupUniqArrayArrayMapsumMapminMapmaxMap
注意
SimpleAggregateFunction(func, Type) 的值都为相同的 Type,
因此与 AggregateFunction 类型不同,无需应用 -Merge/-State 组合器。
在使用相同聚合函数时,SimpleAggregateFunction 类型相比 AggregateFunction
具有更好的性能。