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

AggregatingMergeTree

该引擎继承自 MergeTree,并修改了数据部分合并的逻辑。ClickHouse 将所有具有相同主键(更准确地说,具有相同的 排序键)的行替换为单行(在单个数据部分内),该行存储聚合函数状态的组合。

您可以使用 AggregatingMergeTree 表进行增量数据聚合,包括聚合物化视图。

您可以在以下视频中查看如何使用 AggregatingMergeTree 和 Aggregate 函数的示例:

该引擎处理所有以下类型的列:

AggregateFunction

SimpleAggregateFunction

如果它按数量减少了行数,则适合使用 AggregatingMergeTree

创建表

有关请求参数的描述,请参阅 请求描述

查询子句

创建 AggregatingMergeTree 表时,与创建 MergeTree 表时所需的子句相同。

创建表的弃用方法
备注

请勿在新项目中使用此方法,如果可能,请将旧项目切换到上述描述的方法。

所有参数的含义与 MergeTree 中相同。

SELECT 和 INSERT

要插入数据,请使用带有聚合状态函数的 INSERT SELECT 查询。 从 AggregatingMergeTree 表中选择数据时,请使用 GROUP BY 子句和与插入数据时相同的聚合函数,但使用 -Merge 后缀。

SELECT 查询的结果中,类型为 AggregateFunction 的值具有特定实现的二进制表示,适用于所有 ClickHouse 输出格式。例如,如果您通过 SELECT 查询将数据转储到 TabSeparated 格式中,那么此转储可以通过 INSERT 查询重新加载。

聚合物化视图示例

以下示例假设您有一个名为 test 的数据库,如果不存在,请创建它:

现在创建包含原始数据的表 test.visits

接下来,您需要一个 AggregatingMergeTree 表,以存储跟踪访问总数和唯一用户数的 AggregationFunction

创建一个监视 test.visits 表并使用 AggregateFunction 类型的 AggregatingMergeTree 物化视图:

创建一个物化视图,将 test.visits 的数据填充到 test.agg_visits 中:

插入数据到 test.visits 表中:

数据已插入到 test.visitstest.agg_visits 中。

要获取聚合数据,执行一个如 SELECT ... GROUP BY ... 的查询,从物化视图 test.mv_visits 中获取的数据:

test.visits 添加另一两个记录,但这次尝试使用不同的时间戳插入其中一条记录:

再次运行 SELECT 查询,将返回以下输出: