说明
AggregateFunction 数据类型并存储在表中。这通常通过
materialized view
来实现。
通常有两个聚合函数组合器
会与 AggregateFunction 类型配合使用:
语法
aggregate_function_name- 聚合函数的名称。如果该函数 是参数化函数,则还应指定其参数。types_of_arguments- 聚合函数各参数的类型。
使用方法
数据插入
AggregateFunction 类型列的表中,可以
使用带聚合函数和
-State 聚合
函数组合器的 INSERT SELECT。
例如,要向类型为 AggregateFunction(uniq, UInt64) 和
AggregateFunction(quantiles(0.5, 0.9), UInt64) 的列插入数据,应使用以下
带组合器的聚合函数。
uniq 和 quantiles 相比,uniqState 和 quantilesState
(附加了 -State 组合器) 返回的是状态,而不是最终值。
换句话说,它们返回的是 AggregateFunction 类型的值。
在 SELECT 查询结果中,AggregateFunction 类型的值在所有 ClickHouse 输出
格式里都使用与具体实现相关的二进制表示。
有一个特殊的 Session 级别设置 aggregate_function_input_format,可用于根据输入值构建状态。
它支持以下格式:
state- 包含序列化状态的二进制字符串 (默认值) 。 例如,如果你通过SELECT查询将数据转储为TabSeparated格式,那么这个转储可以通过INSERT查询重新加载。value- 该格式要求提供聚合函数参数的单个值;如果有多个参数,则要求提供由这些参数组成的元组;这些值会被反序列化以形成相应的状态array- 该格式要求提供一个值的 Array,如上面的 value 选项所述;数组中的所有元素都会被聚合以形成该状态
数据选择
AggregatingMergeTree 表中查询数据时,请使用 GROUP BY 子句,
并使用与插入数据时相同的聚合函数,但要加上
-Merge 组合器。
追加了 -Merge 组合器的聚合函数会接收一组
状态,将它们合并,并返回完整数据聚合的结果。
例如,以下两个查询会返回相同的结果:
使用示例
- 博客:在 ClickHouse 中使用适用于数组、Map 和状态的聚合组合器
- MergeState 组合器。
- State 组合器。