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)
与相应的 uniq
和 quantiles
函数相比,-State
函数返回状态,而不是最终值。换句话说,它们返回 AggregateFunction
类型的值。
在 SELECT
查询的结果中,AggregateFunction
类型的值对于所有 ClickHouse 输出格式都具有特定于实现的二进制表示形式。如果将数据转储到(例如)TabSeparated
格式,使用 SELECT
查询,那么可以使用 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 引擎描述。