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.visits
和 test.agg_visits
中。
要获取聚合数据,执行一个查询,比如从物化视图 test.visits_mv
中的 SELECT ... GROUP BY ...
:
向 test.visits
中添加另外几条记录,但这次尝试为其中一条记录使用不同的时间戳:
再次运行 SELECT
查询,将返回以下输出: