首页 > 其他分享 >大数据-139 - ClickHouse 集群 表引擎详解4 - MergeTree 实测案例 ReplacingMergeTree SummingMergeTree

大数据-139 - ClickHouse 集群 表引擎详解4 - MergeTree 实测案例 ReplacingMergeTree SummingMergeTree

时间:2024-09-19 11:22:33浏览次数:10  
标签:00 SummingMergeTree 08 summing 2024 ReplacingMergeTree table 数据 ClickHouse

点一下关注吧!!!非常感谢!!持续更新!!!

目前已经更新到了:

  • Hadoop(已更完)
  • HDFS(已更完)
  • MapReduce(已更完)
  • Hive(已更完)
  • Flume(已更完)
  • Sqoop(已更完)
  • Zookeeper(已更完)
  • HBase(已更完)
  • Redis (已更完)
  • Kafka(已更完)
  • Spark(已更完)
  • Flink(已更完)
  • ClickHouse(正在更新···)

章节内容

上节我们完成了如下的内容:

  • MergeTree 存储结构
  • MergeTree 数据标记
  • MergeTree 分区 索引 标记 压缩协同

在这里插入图片描述

ReplacingMergeTree

简介

这个引擎是在MergeTree的基础上,添加了处理重复数据的功能,该引擎和MergeTree的不同之处在于它会删除具有相同主键的重复项。

特点

  • 使用ORDER BY排序键作为判断重复的唯一键
  • 数据的去重只会在合并的过程中触发
  • 以数据分区为单位删除重复数据,不同分区的重复数据不会被删除
  • 找到重复数据的方式依赖数据已经ORDER BY排好顺序了
  • 如果没有ver版本号,则保留重复数据的最后一行
  • 如果设置ver版本号,则保留重复数据中ver版本号最大的数据

案例

创建新表

CREATE TABLE replace_table (
  id String,
  code String,
  create_time DateTime
) ENGINE = ReplacingMergeTree()
PARTITION BY toYYYYMM(create_time)
ORDER BY (id, code)
PRIMARY KEY id;

运行结果如下图所示:
在这里插入图片描述

插入数据

INSERT INTO replace_table VALUES ('A001', 'C1', '2024-08-01 08:00:00');
INSERT INTO replace_table VALUES ('A001', 'C1', '2024-08-02 08:00:00');
INSERT INTO replace_table VALUES ('A001', 'C8', '2024-08-03 08:00:00');
INSERT INTO replace_table VALUES ('A001', 'C9', '2024-08-04 08:00:00');
INSERT INTO replace_table VALUES ('A002', 'C2', '2024-08-05 08:00:00');
INSERT INTO replace_table VALUES ('A003', 'C3', '2024-08-06 08:00:00');

运行结果如下所示:
在这里插入图片描述

optimize

首先说一下,optimize的作用是:

  • 合并数据块:ClickHouse是一个列式的数据库,它的数据是以数据块(parts)的形式存储在磁盘上,OPTIMIZE TABLE 语句通过较小的数据块来减少块的数量,从而提高查询性能和磁盘利用率。
  • 删除标记的行:如果表中有被标记为删除的行,这些行将在优化过程中被真正删除,释放相应的空间。
  • 分区管理:可以对表的指定分区进行优化,以减少分区内的碎片。
SELECT
  *
FROM
  replace_table;

运行结果如下图所示,通过观察,去重是根据ORDER BY来的,并非 PRIMARY KEY:
在这里插入图片描述

继续插入一条数据:

INSERT INTO replace_table VALUES('A001', 'c1', '2024-01-01 08:00:00')

执行结果如下所示:
在这里插入图片描述
观察上图可以看出,不同分区的数据不会去重。

SummingMergeTree

简介

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

特点

  • 用ORDER BY排序键作为聚合数据的条件KEY
  • 合并分区的时候触发汇总逻辑
  • 以数据分区为单位聚合数据,不同分区的数据不会被汇总
  • 如果在定义引擎时指定了Columns汇总列(非主键)则SUM汇总这些字段
  • 如果没有指定,则汇总所有非主键的数值类型字段
  • SUM汇总相同的聚合KEY的数据,依赖ORDER BY排序
  • 同一分区的SUM汇总过程,非汇总字段的数据保留第一行取值
  • 支持嵌套结构,但列字段名称必须以Map后缀结束

案例1

创建新表

CREATE TABLE smt_table (
  date Date,
  name String,
  a UInt16,
  b UInt16
) ENGINE = SummingMergeTree(date, (date, name), 8192, (a));

运行的结果如下图所示:

插入数据

insert into smt_table (date, name, a, b) values ('2024-08-10', 'a', 1, 2);
insert into smt_table (date, name, a, b) values ('2024-08-10', 'b', 2, 1);
insert into smt_table (date, name, a, b) values ('2024-08-11', 'b', 3, 8);
insert into smt_table (date, name, a, b) values ('2024-08-11', 'b', 3, 8);
insert into smt_table (date, name, a, b) values ('2024-08-11', 'a', 3, 1);
insert into smt_table (date, name, a, b) values ('2024-08-12', 'c', 1, 3);

运行结果如下所示:
在这里插入图片描述

optimize

等待一段时间,或者手动 optimize table 来触发合并,再查询信息:

OPTIMIZE TABLE smt_table;
SELECT 
  *
FROM 
  smt_table;

执行结果如下图所示:
在这里插入图片描述

通过观察,我们会发现,2024-08-11, b 和 a 列合并相加了,b列取了8(因为b列为8的数据最先插入的)

案例2

创建新表

CREATE TABLE summing_table(
  id String,
  city String,
  v1 UInt32,
  v2 Float64,
  create_time DateTime
) ENGINE = SummingMergeTree()
PARTITION BY toYYYYMM(create_time)
ORDER BY (id, city);

执行结果如下图:
在这里插入图片描述

插入数据

insert into table summing_table values('A000','beijing',10,20,'2024-08-20 08:00:00');
insert into table summing_table values('A000','beijing',20,30,'2024-08-30 08:00:00');
insert into table summing_table values('A000','shanghai',10,20,'2024-08-20 08:00:00');
insert into table summing_table values('A000','beijing',10,20,'2024-06-20 08:00:00');
insert into table summing_table values('A001','beijing',50,60,'2024-02-20 08:00:00');

执行结果如下图所示:
在这里插入图片描述

optimize

OPTIMIZE TABLE summing_table;
SELECT 
  *
FROM
  summing_table;

执行结果如下图所示:
在这里插入图片描述
通过观察,根据ORDER BY排序键(id, city)作为聚合KEY,因为没有在建表时指定SummingMergeTree的SUM列,所以把所有非主键数值类型的列都进行了SUM处理。

案例3

SummingMergeTree支持嵌套类型的字段,但列字段名称必须以Map后缀结束。

创建新表

CREATE TABLE summing_table_nested(
  id String,
  nestMap Nested(
    id UInt32,
    key UInt32,
    val UInt64
  ),
  create_time DateTime
) ENGINE = SummingMergeTree()
PARTITION BY toYYYYMM(create_time)
ORDER BY id;

执行的结果如下图所示:
在这里插入图片描述

插入数据

INSERT INTO summing_table_nested VALUES ('1', [101, 102], [201, 202], [1001, 1002], '2024-08-01 10:00:00');
INSERT INTO summing_table_nested VALUES ('2', [103, 104], [203, 204], [1003, 1004], '2024-08-01 10:00:00');
INSERT INTO summing_table_nested VALUES ('1', [105, 106], [205, 206], [1005, 1006], '2024-08-01 10:00:00');
INSERT INTO summing_table_nested VALUES ('2', [107, 108], [207, 208], [1007, 1008], '2024-08-02 10:00:00');
INSERT INTO summing_table_nested VALUES ('3', [109, 110], [209, 210], [1009, 1010], '2024-08-02 10:00:00');
INSERT INTO summing_table_nested VALUES ('4', [111, 112], [211, 212], [1011, 1012], '2024-08-02 10:00:00');

执行过程如下图所示:
在这里插入图片描述
执行过程如下图所示:
在这里插入图片描述
可以看到,我们插入了6条数据,但是查询到的只有4条,而且此外也进行计算的SUM处理。

标签:00,SummingMergeTree,08,summing,2024,ReplacingMergeTree,table,数据,ClickHouse
From: https://blog.csdn.net/w776341482/article/details/142350550

相关文章

  • [Clickhouse] Clickhouse 函数 : 数据类型转换
    0引言如无特殊说明,ck版本为21.3.4.251数据类型的支持情况查看当前受支持的数据类型select*fromsystem.data_type_families--selectname,case_insensitive,alias_tofromsystem.data_type_families;outputname|case_insensitive......
  • ClickHouse-Kafka Engine 正确的使用方式
    Kafka是大数据领域非常流行的一款分布式消息中间件,是实时计算中必不可少的一环,同时一款OLAP系统能否对接Kafka也算是考量是否具备流批一体的衡量指标之一。ClickHouse的Kafka表引擎能够直接与Kafka系统对接,进而订阅Kafka中的Topic并实时接受消息数据。众所周......
  • ClickHouse的安装配置+DBeaver远程连接
    1、clickhouse的下载:先去clickhouse官网进行下载,继续往下翻找文档,将DBeaver也下载下来下载地址:https://packages.clickhouse.com/rpm/stable/下载这个四个rpm包 2、上传rmp文件到Linux中自己创建的一个clickhouse-install的文件夹,将这四个包存放进去3、开始安装1......
  • DBeaver clickhouse 时区不对 时间少了8小时
    现象:确认过clickhouse时区配置是正确的(时区配置参考:https://blog.csdn.net/vkingnew/article/details/107227037)然而通过DBeaver连接后查询当前时间却慢了8小时,通过命令行连接clickhouse查看时间又是准确的命令行查询DBeaver查询原因:是DBeaver配置问题解决方法:......
  • 记录 macos 链接 win10 wsl2 ubuntu clickhouse 记录
    遇到了许多问题顺序应该不同首先就是链接的客户端是DBeaver链接的时候要选择版本低版本的用legacy,   驱动也很重要,下不到驱动的可以用网上找的驱动来安装  有的时候会有类名的问题但是报错很离谱会报  dbeaverclickhouse链接错误code:46Unknow......
  • clickhouse组件介绍
    写在前面今天学习clickhouse部分的知识。ClickHouseOLTP(联机事务处理系统)例如MySQL等关系型数据库,适用于小数据量时的快速查询和分析。OLTP主要针对增删改操作,数据经常发生变化。OLAP(联机分析处理系统)适用于数据长期不变且有大量历史数据的场景,主要进行分析操作,增......
  • 使用 Quickwit 的搜索流功能为 ClickHouse 添加全文搜索
    本指南将帮助您使用Quickwit的搜索流功能为知名的OLAP数据库ClickHouse添加全文搜索。Quickwit暴露了一个REST端点,可以极快地(每秒最多5000万条)流式传输匹配搜索查询的ID或其他属性,ClickHouse可以轻松地使用它们进行连接查询。我们将采用GitHub存档数据集,该数据......
  • clickhouse备份与恢复 - 使用官方命令
    在ClickHouse中可以通过以下步骤将数据备份到文件服务器上:编辑ClickHouse配置文件/etc/clickhouse-server/config.xml,在<backup_settings>部分添加以下内容:<remote_servers><b_server><host>b_server_ip_or_hostname</host><user>remote_......
  • Clickhouse备份与恢复
    一、安装clickhouse-backup1、下载安装包cd/server/tools/wgethttps://github.com/Altinity/clickhouse-backup/releases/download/v2.4.33/clickhouse-backup-linux-amd64.tar.gz2、创建存放clickhouse-backup的目录,并解压mkdir-pv/data/clickhouse-backuptarxvfcl......
  • 数据迁移新技能,MongoDB轻松同步至ClickHouse
    在当今数据驱动的世界中,企业的成功依赖于对数据的高效管理和精准分析。数据迁移是实现这些目标的关键环节,而选择合适的工具可以让这项工作变得更加轻松和高效。ETLCloud是一款创新的ETL(提取、转换、加载)工具,它提供了简单直观的界面和强大的功能,专门为现代数据集成挑战设计。它不......