跳到主要内容
跳到主要内容

SimpleAggregateFunction 类型

描述

SimpleAggregateFunction 数据类型用于存储聚合函数的中间状态,但不会像 AggregateFunction 类型那样存储其完整状态。

此类优化适用于满足以下性质的函数:

将函数 f 应用于行集 S1 UNION ALL S2 的结果,可以通过分别对行集的各个部分应用 f,然后再对这些结果应用一次 f 获得:f(S1 UNION ALL S2) = f(f(S1) UNION ALL f(S2))

该性质保证仅使用部分聚合结果就足以计算出合并后的结果,因此无需存储和处理额外数据。例如,minmax 函数在从中间结果计算最终结果时不需要额外步骤;而 avg 函数则需要同时记录总和与计数,在最终的 Merge 步骤中合并中间状态后,再将两者相除即可得到平均值。

聚合函数的值通常是通过调用在函数名后追加 -SimpleState 组合器的聚合函数来生成的。

语法

SimpleAggregateFunction(聚合函数名, 参数类型...)

参数

  • 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;