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

AggregatingMergeTree

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

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

在下面的视频中,您可以看到如何使用 AggregatingMergeTree 和聚合函数的示例:

该引擎处理所有类型的列,如下所示:

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 表的 AggregatingMergeTree 物化视图,并使用 AggregateFunction 类型:

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

将数据插入到 test.visits 表中:

数据同时插入到 test.visitstest.agg_visits 中。

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

test.visits 中添加另外几条记录,但这次尝试为其中一条记录使用不同的时间戳:

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