跳转到主要内容

描述

SimpleAggregateFunction 数据类型存储聚合函数的中间状态, 但不像 AggregateFunction 类型那样存储其完整状态。 这种优化可应用于满足以下性质的函数:
对行集 S1 UNION ALL S2 应用函数 f 的结果,可以通过分别对行集的各个部分应用 f,然后再 对这些结果应用 f 得到:f(S1 UNION ALL S2) = f(f(S1) UNION ALL f(S2))
这一性质保证了,部分聚合结果就足以计算 合并后的结果,因此我们无需存储和处理任何额外数据。例如, minmax 函数的结果无需额外步骤即可从中间结果 计算出最终结果,而 avg 函数则需要跟踪总和与计数, 然后在合并中间状态的最终 Merge 步骤中将二者相除以得到 平均值。 聚合函数值通常通过调用聚合函数,并在函数名后附加 -SimpleState 组合器来生成。

语法

SimpleAggregateFunction(aggregate_function_name, types_of_arguments...)
参数
  • aggregate_function_name - 聚合函数名称。
  • Type - 聚合函数参数的类型。

支持的函数

支持以下聚合函数:
SimpleAggregateFunction(func, Type) 的值具有相同的 Type, 因此不同于 AggregateFunction 类型,无需应用 -Merge/-State 组合器。对于相同的聚合函数,SimpleAggregateFunction 类型的性能优于 AggregateFunction 类型。

示例

CREATE TABLE simple (id UInt64, val SimpleAggregateFunction(sum, Double)) ENGINE=AggregatingMergeTree ORDER BY id;
最后修改于 2026年6月10日