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
- 聚合函数参数的类型。
支持的函数
支持以下聚合函数:
any
any_respect_nulls
anyLast
anyLast_respect_nulls
min
max
sum
sumWithOverflow
groupBitAnd
groupBitOr
groupBitXor
groupArrayArray
groupUniqArrayArray
groupUniqArrayArrayMap
sumMap
minMap
maxMap
备注
SimpleAggregateFunction(func, Type)
的值具有相同的 Type
,因此与 AggregateFunction
类型不同,无需应用 -Merge
/ -State
组合器。
SimpleAggregateFunction
类型在性能上优于相同聚合函数的 AggregateFunction
。