Clickhouse从入门到入坑(17)

76 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 18 天,点击查看活动详情

生命不息,学习不止

题外话

周日了,最近的中证一直绿油油的,就像窗外的小树冒了芽,可是我想看见红色,中证加加油,让世界看看中国红,亮瞎他们的双眼

废话不多说,上货

在这里插入图片描述

AggregatingMergeTree原理演示

上节讲了AggregatingMergeTree的工作原理,这节就来演示一下

以下是 AggregatingMergeTree 表引擎示意图:

Table Data:

key    | column1 | column2 | column3
-------|---------|---------|--------
key1   | 1       | 2       | 3
key2   | 2       | 3       | 4
key3   | 3       | 4       | 5
key4   | 4       | 5       | 6
key5   | 5       | 6       | 7

Column Families:

CF1:
key    | column1 | column2 | column3
-------|---------|---------|--------
key1   | 1       | 2       | 3
key2   | 2       | 3       | 4

CF2:
key    | column1 | column2 | column3
-------|---------|---------|--------
key3   | 3       | 4       | 5
key4   | 4       | 5       | 6

CF3:
key    | column1 | column2 | column3
-------|---------|---------|--------
key5   | 5       | 6       | 7

上述示意图中,Table Data 表示原始数据表,包含了 key 列和多个数据列。Column Families 则是按照 key 列将数据分成多个列簇,每个列簇包含了若干行数据。

例如,CF1 表示的是 key1 和 key2 两个数据行组成的列簇。当有新数据到来时,AggregatingMergeTree 表引擎会先根据 key 列信息找到相应的列簇,然后将新数据添加到该列簇的最后一行。例如,如果新增一行数据 (key3, 4, 5, 6),则会将该行数据添加到 CF2 列簇的最后一行。

当某个列簇的行数达到一定阈值时,AggregatingMergeTree 表引擎会将该列簇合并成一个新的列簇。例如,当 CF2 表中的行数达到一定阈值时,会将 CF2 表中的数据按照 key 列的值进行排序,然后对相邻的行数据进行聚合,得到新的聚合结果。例如,可以对 CF2 表中的数据按照 column1 进行求和,得到新的聚合结果 (key3, 7, 9, 11)。

当进行数据查询时,AggregatingMergeTree 表引擎会先根据查询条件找到相应的列簇,然后按照 key 列的值进行排序。如果查询条件中包含聚合函数,那么 AggregatingMergeTree 表引擎会在该列簇内对相应的数据进行聚合,得到聚合结果。例如,如果查询 column1 的平均值,那么 AggregatingMergeTree 表引擎会对每个列簇内的 column1 进行求和并除以行数,最终得到所有列簇

你以为结束了

下一篇我们继续挖坑,演示一下AggregatingMergeTree的原理

在这里插入图片描述

大家看完发现有什么错误,写在下面吧!跟我黑虎阿福比划比划! 在这里插入图片描述