描述
SimpleAggregateFunction 数据类型存储聚合函数的中间状态,
但不像 AggregateFunction
类型那样存储其完整状态。
这种优化可应用于满足以下性质的函数:
对行集这一性质保证了,部分聚合结果就足以计算 合并后的结果,因此我们无需存储和处理任何额外数据。例如,S1 UNION ALL S2应用函数f的结果,可以通过分别对行集的各个部分应用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_nullsminmaxsumsumWithOverflowgroupBitAndgroupBitOrgroupBitXorgroupArrayArraygroupUniqArrayArraygroupUniqArrayArrayMapsumMap(sumMappedArrays)minMap(minMappedArrays)maxMap(maxMappedArrays)timeSeriesGroupArray(接受一个类型为Array(Tuple(timestamp, value))的参数)
SimpleAggregateFunction(func, Type) 的值具有相同的 Type,
因此不同于 AggregateFunction 类型,无需应用
-Merge/-State 组合器。对于相同的聚合函数,SimpleAggregateFunction 类型的性能优于 AggregateFunction 类型。