首页 > 其他分享 >ClickHouse(11)ClickHouse合并树MergeTree家族表引擎之SummingMergeTree详细解析

ClickHouse(11)ClickHouse合并树MergeTree家族表引擎之SummingMergeTree详细解析

时间:2023-01-16 21:22:54浏览次数:65  
标签:11 SummingMergeTree 汇总 MergeTree key 主键 ClickHouse

目录

SummingMergeTree引擎继承自MergeTree。区别在于,当合并SummingMergeTree表的数据片段时,ClickHouse会把所有具有相同主键的行合并为一行,该行包含了被合并的行中具有数值数据类型的列的汇总值。如果主键的组合方式使得单个键值对应于大量的行,则可以显著的减少存储空间并加快数据查询的速度。

一般SummingMergeTree和MergeTree一起使用。例如,在准备做报告的时候,将完整的数据存储在MergeTree表中,并且使用SummingMergeTree来存储聚合数据。这种方法可以避免因为使用不正确的主键组合方式而丢失有价值的数据。

建表语法

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
    ...
) ENGINE = SummingMergeTree([columns])
[PARTITION BY expr]
[ORDER BY expr]
[SAMPLE BY expr]
[SETTINGS name=value, ...]

创建SummingMergeTree表的参数中,与MergeTree不同的是[columns]。columns包含了将要被汇总的列的列名的元组。属于可选参数。所选的列必须是数值类型,并且不可位于主键中。

如果没有指定columns,ClickHouse会把所有不在主键中的数值类型的列都进行汇总。

其他的参数与MergeTree表是一致。

MergeTree表引擎的解析可以参考ClickHouse(09)ClickHouse合并树MergeTree家族表引擎之MergeTree详细解析

-- 建表
CREATE TABLE summtt
(
    key UInt32,
    value UInt32
)
ENGINE = SummingMergeTree()
ORDER BY key;

-- 插入数据
INSERT INTO summtt Values(1,1),(1,2),(2,1);

-- 查询数据
-- ClickHouse可能不会完整的汇总所有行,因此在查询中使用了聚合函数sum和GROUP BY子句。
-- ClickHouse定期合并插入的数据片段,并在这个时候对所有具有相同主键的行中的列进行汇总,将这些行替换为包含汇总数据的一行记录。
SELECT key, sum(value) FROM summtt GROUP BY key;

-- 查询结果
┌─key─┬─sum(value)─┐
│   2 │          1 │
│   1 │          3 │
└─────┴────────────┘

数据处理

当数据被插入到表中时,他们将被原样保存。ClickHouse定期合并插入的数据片段,并在这个时候对所有具有相同主键的行中的列进行汇总,将这些行替换为包含汇总数据的一行记录。

ClickHouse会按片段合并数据,以至于不同的数据片段中会包含具有相同主键的行,即单个汇总片段将会是不完整的。因此,聚合函数sum()和GROUP BY子句应该在(SELECT)查询语句中被使用,如上面的例子。

汇总的通用规则

  • 列中数值类型的值会被汇总,进行sum操作。这些列的集合在参数columns中被定义。
  • 如果用于汇总的所有列中的值均为0,则该行会被删除。
  • 如果列不在主键中且无法被汇总,则会在现有的值中任选一个。
  • 主键所在的列中的值不会被汇总。

AggregateFunction 列中的汇总

对于AggregateFunction类型的列,ClickHouse根据对应函数表现为AggregatingMergeTree引擎的聚合。

嵌套结构数据的处理

表中可以具有以特殊方式处理的嵌套数据结构。

如果嵌套表的名称以 Map 结尾,并且包含至少两个符合以下条件的列:

  • 第一列是数值类型(Int,Date,DateTime),称之为key,
  • 其他的列是可计算的(Int,Float32/64),称之为(values...),

然后这个嵌套表会被解释为一个key=>(values...)的映射,当合并它们的行时,两个数据集中的元素会被根据key合并为相应的(values...)的汇总值。如下面的例子。

[(1, 100)] + [(2, 150)] -> [(1, 100), (2, 150)]
[(1, 100)] + [(1, 150)] -> [(1, 250)]
[(1, 100)] + [(1, 150), (2, 150)] -> [(1, 250), (2, 150)]
[(1, 100), (2, 150)] + [(1, -100)] -> [(2, 150)]

请求数据时,使用sumMap(key,value)函数来对Map进行聚合。对于嵌套数据结构,你无需在列的元组中指定列以进行汇总。

资料分享

ClickHouse经典中文文档分享

参考文章

标签:11,SummingMergeTree,汇总,MergeTree,key,主键,ClickHouse
From: https://www.cnblogs.com/the-pig-of-zf/p/17056317.html

相关文章

  • ACM预备队-week11(综合)
    1.汤姆斯的天堂梦题目链接:P1796汤姆斯的天堂梦-洛谷|计算机科学教育新生态(luogu.com.cn)此题类似于数字三角形,要求从顶点到三角形最后一行的最大距离和,dp1#in......
  • QTwin10/11上打包的qt程序放到win7上打不开的解决方法
    在win11上编写并打包发布了qt5.15.1msvc201964bit的qt程序,在其他win10电脑上都能正常运行,但是放到win7电脑上,运行exe时依次出现缺少“msvcp140”、“api-ms-win-crt-r......
  • 剑指 Offer 11. 旋转数组的最小数字
    剑指Offer11.旋转数组的最小数字把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。给你一个可能存在 重复 元素值的数组 numbers ,它原来是一个......
  • win11点击任务栏快捷方式出现“该文件没有与之关联的应用来执行该操作”解决方法
       win11点击任务栏快捷方式出现“该文件没有与之关联的应用来执行该操作”大概率原因就是我们在去掉桌面快捷图标的小箭头时,把IsShortcut文件删除了。因为这种方法适......
  • centos7 安装jdk11
    升级了jenkins,发现无法启动。手动启动时提示jdk版本过旧,于是升级jdk。因为之前我是使用tar安装,所以我直接删除jdk1.8的全部文件,然后删除配置文件的相关配置,然后重新安......
  • sc stream-rabbit 优化版、绑定器-自定20230112
     一、生产者【2062】     1、pom.xml<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-star......
  • sc stream-rabbit笔记20230111
                    自定义通道   ......
  • Windows11的性能的简单提升
    1、安装时使用本地账户。Win1122H2除企业版、教育版外均会要求强制使用在线账户登录,拔网线也不好使,但可以通过输入假邮箱的方式跳过,比如[email protected]@[email protected]......
  • windows11关闭 VBS 和 HVCI 提高运行速度
    转载自微信公众号:电手。微软大力鼓吹Windows11在安全方面的提升,除了TPM外, VBS 和  HVCI 也开始被更广泛应用。VBS基于虚拟化的安全性,通常称为内核隔离。使用......
  • CF1133B 题解
    原题链接这道题其实很简单要让两数和为\(k\)的倍数,需要满足以下两条件之一:两数都是\(k\)的倍数两数的余数和为\(k\)因此,我们可以先统计出余数再按上述条......