描述
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 组合器来生成。
语法
SimpleAggregateFunction(aggregate_function_name, types_of_arguments...)参数
aggregate_function_name- 聚合函数名称。Type- 聚合函数参数的类型。
支持的函数
支持以下聚合函数:
anyany_respect_nullsanyLastanyLast_respect_nullsminmaxsumsumWithOverflowgroupBitAndgroupBitOrgroupBitXorgroupArrayArraygroupUniqArrayArraygroupUniqArrayArrayMapsumMap(sumMappedArrays)minMap(minMappedArrays)maxMap(maxMappedArrays)
示例
CREATE TABLE simple (id UInt64, val SimpleAggregateFunction(sum, Double)) ENGINE=AggregatingMergeTree ORDER BY id;