Skip to main content
Skip to main content
Edit this page

AggregateFunction(name, types_of_arguments...)

聚合函数的中间状态,可以通过聚合函数名称加-State后缀的形式得到它。与此同时,当您需要访问该类型的最终状态数据时,您需要以相同的聚合函数名加-Merge后缀的形式来得到最终状态数据。

AggregateFunction — 参数化的数据类型。

参数

  • 聚合函数名

    如果函数具备多个参数列表,请在此处指定其他参数列表中的值。

  • 聚合函数参数的类型

示例

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

上述中的uniq, anyIf (任何+如果) 以及 分位数 都为ClickHouse中支持的聚合函数。

使用指南

数据写入

当需要写入数据时,您需要将数据包含在INSERT SELECT语句中,同时对于AggregateFunction类型的数据,您需要使用对应的以-State为后缀的函数进行处理。

函数使用示例

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

不同于uniqquantiles函数返回聚合结果的最终值,以-State后缀的函数总是返回AggregateFunction类型的数据的中间状态。

对于SELECT而言,AggregateFunction类型总是以特定的二进制形式展现在所有的输出格式中。例如,您可以使用SELECT语句将函数的状态数据转储为TabSeparated格式的同时使用INSERT语句将数据转储回去。

数据查询

当从AggregatingMergeTree表中查询数据时,对于AggregateFunction类型的字段,您需要使用以-Merge为后缀的相同聚合函数来聚合数据。对于非AggregateFunction类型的字段,请将它们包含在GROUP BY子句中。

-Merge为后缀的聚合函数,可以将多个AggregateFunction类型的中间状态组合计算为最终的聚合结果。

例如,如下的两个查询返回的结果总是一致:

SELECT uniq(UserID) FROM table

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

使用示例

请参阅 AggregatingMergeTree 的说明

Try ClickHouse Cloud for FREE

Easy data ingestion, automatic scaling, built-in SQL console and lots more.

Try it for Free