目录
AggregatingMergeTree引擎继承自 MergeTree,并改变了数据片段的合并逻辑。ClickHouse会将一个数据片段内所有具有相同主键(准确的说是排序键)的行替换成一行,这一行会存储一系列聚合函数的状态。
可以使用AggregatingMergeTree表来做增量数据的聚合统计,包括物化视图的数据聚合。
引擎使用以下类型来处理所有列:
- AggregateFunction
- SimpleAggregateFunction
AggregatingMergeTree适用于能够按照一定的规则缩减行数的情况。
建表语法
- CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
- (
- name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
- name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
- ...
- ) ENGINE = AggregatingMergeTree()
- [PARTITION BY expr]
- [ORDER BY expr]
- [SAMPLE BY expr]
- [TTL expr]
- [SETTINGS name=value, ...]
复制代码 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怎么安装和部署
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |