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

AggregateFunction

聚合函数具有实现定义的中间状态,可以序列化为 AggregateFunction(...) 数据类型并存储在表中,通常通过物化视图的方式。 生成聚合函数状态的常用方法是调用带有 -State 后缀的聚合函数。 要在将来获得聚合的最终结果,您必须使用带有 -Merge 后缀的相同聚合函数。

AggregateFunction(name, types_of_arguments...) — 参数化数据类型。

参数

  • 聚合函数的名称。 如果函数是参数化的,也请指定其参数。

  • 聚合函数参数的类型。

示例

CREATE TABLE t
(
column1 AggregateFunction(uniq, UInt64),
column2 AggregateFunction(anyIf, String, UInt8),
column3 AggregateFunction(quantiles(0.5, 0.9), UInt64)
) ENGINE = ...

uniq、anyIf (any+If) 和 quantiles 是 ClickHouse 中支持的聚合函数。

用法

数据插入

要插入数据,请将 INSERT SELECT 与聚合 -State 函数一起使用。

函数示例

uniqState(UserID)
quantilesState(0.5, 0.9)(SendTiming)

与相应的函数 uniqquantiles 相比,-State 函数返回状态,而不是最终值。 换句话说,它们返回 AggregateFunction 类型的值。

SELECT 查询的结果中,AggregateFunction 类型的值对于所有 ClickHouse 输出格式都具有特定于实现的二进制表示形式。 如果将数据转储到例如带有 SELECT 查询的 TabSeparated 格式,则可以使用 INSERT 查询将此转储加载回去。

数据选择

AggregatingMergeTree 表中选择数据时,请使用 GROUP BY 子句以及与插入数据时相同的聚合函数,但使用 -Merge 后缀。

带有 -Merge 后缀的聚合函数接受一组状态,将它们组合起来,并返回完整数据聚合的结果。

例如,以下两个查询返回相同的结果

SELECT uniq(UserID) FROM table

SELECT uniqMerge(state) FROM (SELECT uniqState(UserID) AS state FROM table GROUP BY RegionID)

使用示例

请参阅 AggregatingMergeTree 引擎描述。