SimpleAggregateFunction
SimpleAggregateFunction(name, types_of_arguments...)
数据类型存储聚合函数的当前值(中间状态),而不是像 AggregateFunction
那样存储其完整状态。此优化可以应用于以下属性成立的函数:将函数 f
应用于行集 S1 UNION ALL S2
的结果可以通过分别将 f
应用于行集的部分,然后再次将 f
应用于结果来获得:f(S1 UNION ALL S2) = f(f(S1) UNION ALL f(S2))
。此属性保证部分聚合结果足以计算合并后的结果,因此我们无需存储和处理任何额外数据。
生成聚合函数值的常用方法是使用 -SimpleState 后缀调用聚合函数。
支持以下聚合函数
any
anyLast
min
max
sum
sumWithOverflow
groupBitAnd
groupBitOr
groupBitXor
groupArrayArray
groupUniqArrayArray
sumMap
minMap
maxMap
注意
SimpleAggregateFunction(func, Type)
的值看起来和存储方式与 Type
相同,因此您无需应用带有 -Merge
/-State
后缀的函数。
SimpleAggregateFunction
比具有相同聚合函数的 AggregateFunction
具有更好的性能。
参数
- 聚合函数的名称。
- 聚合函数参数的类型。
示例
CREATE TABLE simple (id UInt64, val SimpleAggregateFunction(sum, Double)) ENGINE=AggregatingMergeTree ORDER BY id;