开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 19 天,点击查看活动详情
生命不息,学习不止
题外话
周一了,今天的天气非常不错,很晴朗,中证几天也很晴朗,但仍然没能扭转我之前亏钱的局面,中证加油啊,突破3300点,永创高峰成不成,盈利分你一半
废话不多说,上货
SummingMergeTree表引擎
SummingMergeTree表引擎仍然是MergeTree家族中的一员,它用于支持带有聚合函数的数据查询。它的原理是将相同的键值对聚合到一个块中,并在查询时对这些值进行求和。
具体来说,SummingMergeTree引擎使用类似于MergeTree引擎的结构来存储数据。每个块包含相同键值的一组数据行,这些数据行在插入时被聚合为一个单独的值,然后被存储在块的头部。每个块还包含了一些元数据,例如块的最小和最大键值,块中的行数,以及聚合后的值。
当新数据插入到SummingMergeTree表中时,它将与现有的块进行比较。如果新数据的键值与现有块中的键值相同,则将新数据的值与块中存储的聚合值相加,并将结果更新到块头中。否则,新数据将被插入到新块中。
当查询SummingMergeTree表时,它将根据查询的键值范围选择并合并需要的块。如果存在相同的键,则选择块头中的聚合值作为结果。在合并块时,SummingMergeTree引擎使用快速求和算法,以避免遍历所有行来计算聚合值,这使得SummingMergeTree在处理大量数据时具有很好的性能。
总的来说,SummingMergeTree引擎通过将相同键值的数据行聚合到单个值中,以及使用快速求和算法来加速聚合计算,来支持高效的聚合查询操作。
原理演示
假设有以下三个数据行需要被插入到一个SummingMergeTree表中:
{2023-01-01, "A", 10}
{2023-01-01, "B", 20}
{2023-01-02, "A", 30}
其中第一列是时间戳,第二列是字符串键,第三列是需要被聚合的值。
当这些数据被插入到SummingMergeTree表时,它们被聚合为以下块:
┌───────┬─────┬─────┐
│ key │ cnt │ sum │
├───────┼─────┼─────┤
│ A-2021│ 2 │ 40 │
│ B-2021│ 1 │ 20 │
└───────┴─────┴─────┘
块的键值是将原始键值拼接在一起后的结果,例如"A-2021"表示"2021-01-01"这个日期下所有"A"键的数据。每个块的"cnt"列表示该块中包含的行数,"sum"列表示聚合后的值。
接下来,当查询SummingMergeTree表以获取所有键为"A"的数据时,它将选择块"A-2021"并返回该块的聚合值,即"cnt=2, sum=40"。如果查询的键是"B",则选择块"B-2021"并返回聚合值"cnt=1, sum=20"。如果查询跨越多个块,则每个块的聚合值都将被加入到最终结果中。
你以为结束了
下一篇我们继续挖坑
大家看完发现有什么错误,写在下面吧!跟我黑虎阿福比划比划!