灌篮少年 发表于 2023-2-7 01:43:03

ClickHouse(12)ClickHouse合并树MergeTree家族表引擎之AggregatingMergeTre

目录

[*]建表语法
[*]查询和插入数据
[*]数据处理逻辑
[*]ClickHouse相关资料分享

AggregatingMergeTree引擎继承自 MergeTree,并改变了数据片段的合并逻辑。ClickHouse会将一个数据片段内所有具有相同主键(准确的说是排序键)的行替换成一行,这一行会存储一系列聚合函数的状态。
可以使用AggregatingMergeTree表来做增量数据的聚合统计,包括物化视图的数据聚合。
引擎使用以下类型来处理所有列:

[*]AggregateFunction
[*]SimpleAggregateFunction
AggregatingMergeTree适用于能够按照一定的规则缩减行数的情况。
建表语法

CREATE TABLE table_name
(
    name1 ,
    name2 ,
    ...
) ENGINE = AggregatingMergeTree()




AggregatingMergeTree表参数与MergeTree表是一致。MergeTree表引擎的解析可以参考ClickHouse(09)ClickHouse合并树MergeTree家族表引擎之MergeTree详细解析
查询和插入数据

要插入数据,需使用带有-State-聚合函数的INSERT或SELECT语句。从AggregatingMergeTree表中查询数据时,需使用GROUP BY子句并且要使用与插入时相同的聚合函数,但后缀要改为-Merge。
对于SELECT查询的结果,AggregateFunction类型的值对ClickHouse的所有输出格式都实现了特定的二进制表示法。在进行数据转储时,例如使用TabSeparated格式进行SELECT查询,那么这些转储数据也能直接用INSERT语句导回。
如下面的例子。
-- 创建一个AggregatingMergeTree物化视图
CREATE MATERIALIZED VIEW test.basic
ENGINE = AggregatingMergeTree() PARTITION BY toYYYYMM(StartDate) ORDER BY (CounterID, StartDate)
AS SELECT
    CounterID,
    StartDate,
    sumState(Sign)    AS Visits,
    uniqState(UserID) AS Users
FROM test.visits
GROUP BY CounterID, StartDate;

--向 test.visits 表中插入数据,数据会同时插入到表和视图中,并且视图 test.basic 会将里面的数据聚合。

INSERT INTO test.visits ...

-- 获取聚合数据,需要在test.basic视图上执行类似SELECT ... GROUP BY ...这样的查询

SELECT
    StartDate,
    sumMerge(Visits) AS Visits,
    uniqMerge(Users) AS Users
FROM test.basic
GROUP BY StartDate
ORDER BY StartDate;数据处理逻辑

最后总结一下AggregatingMergeTree的处理逻辑。

[*]用ORBER BY排序键作为聚合数据的条件Key。
[*]使用AggregateFunction字段类型定义聚合函数的类型以及聚合的字段。
[*]只有在合并分区的时候才会触发聚合计算的逻辑。
[*]以数据分区为单位来聚合数据。当分区合并时,同一数据分区内聚合Key相同的数据会被合并计算,而不同分区之间的数据则不会被计算。
[*]在进行数据计算时,因为分区内的数据已经基于ORBER BY排序,所以能够找到那些相邻且拥有相同聚合Key的数据。
[*]在聚合数据时,同一分区内,相同聚合Key的多行数据会合并成一行。对于那些非主键、非AggregateFunction类型字段,则会使用第一行数据的取值。
[*]AggregateFunction类型的字段使用二进制存储,在写入数据时,需要调用*State函数;而在查询数据时,则需要调用相应的*Merge函数。其中,*表示定义时使用的聚合函数。
[*]AggregatingMergeTree通常作为物化视图的表引擎,与普通MergeTree搭配使用。
ClickHouse相关资料分享

ClickHouse经典中文文档分享
参考文章:ClickHouse(03)ClickHouse怎么安装和部署

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: ClickHouse(12)ClickHouse合并树MergeTree家族表引擎之AggregatingMergeTre