ClickHouse--06--其他扩展MergeTree系列表引擎

2024-02-17 02:44

本文主要是介绍ClickHouse--06--其他扩展MergeTree系列表引擎,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

其他扩展MergeTree系列

MergeTree 系列表引擎 --种类

MergeTree 系 列 表 引 擎 包 含 :

  • MergeTree
  • ReplacingMergeTree
  • SummingMergeTree(汇总求和功能)
  • AggregatingMergeTree(聚合功能)
  • CollapsingMergeTree(折叠删除功能)
  • VersionedCollapsingMergeTree(版本折叠功能)引擎

在这些的基础上还可以叠加 Replicated 和 Distributed。

1. ReplacingMergeTree

在这里插入图片描述

1.1 概念

  • 以 上 MergeTree 不 能 对 相 同 主 键 的 数 据 进 行 去 重 , ClickHouse 提 供 了
    ReplacingMergeTree 引擎,可以针对同分区内相同主键的数据进行去重,它能够在合并分区时删除重复的数据
  • 值得注意的是,ReplacingMergeTree只是在一定程度上解决了数据重复问题,由于自动分区合并机制在后台定时执行所以并不能完全保障数据不重复
  • ReplacingMergeTree 适用于在后台清除重复的数据以节省空间。

1.2 建表语句

ReplaceingMergeTree 建表语句:
在这里插入图片描述
在这里插入图片描述

使用 ReplacingMergeTree 是需要注意以下几点:

  • 如何判断数据重复
    ReplacingMergeTree 在去除重复数据时,是以 ORDERBY 排序键为基准的,而不是PRIMARY KEY。
  • 何时删除重复数据
    在执行分区合并时,会触发删除重复数据。optimize 的合并操作是在后台执行的,无法预测具体执行时间点,除非是手动执行。
  • 不同分区的重复数据不会被去重
    ReplacingMergeTree 是以分区为单位删除重复数据的。只有在相同的数据分区内重复的数据才可以被删除,而不同数据分区之间的重复数据依然不能被剔除。
  • 数据去重的策略是什么
    如果没有设置[ver]版本号,则保留同一组重复数据中的最新插入的数据
    如果设置了[ver]版本号,则保留同一组重复数据中 ver 字段取值最大的那一行
  • optimize 命令使用
    一般在数据量比较大的情况,尽量不要使用该命令。因为在海量数据场景下,执行optimize 要消耗大量时间。

2.SummingMergeTree

在这里插入图片描述

2.1 概念

该引擎继承了 MergeTree 引擎,当合并 SummingMergeTree 表的数据片段时ClickHouse 会把所有具有相同主键的行合并为一行,该行包含了被合并的行中具有数值数据类型的列的汇总值,即如果存在重复的数据,会对对这些重复的数据进行合并成一条数据,类似于 group by 的效果,可以显著减少存储空间并加快数据查询速度。

  • 如果用户只需要查询数据的汇总结果,不关心明细数据,并且数据的汇总条件是预先明确的,即 GROUP BY的分组字段是确定的,可以使用该表引擎。

2.2 SummingMergeTree 建表语句:

在这里插入图片描述
使用 SummingMergeTree 注意以下几点:

  • SummingMergeTree 是根据什么对两条数据进行合并的
    用 ORBER BY 排序键作为聚合数据的条件 Key。即如果排序key 是相同的,则会合并成一条数据,并对指定的合并字段进行聚合。
  • 仅对分区内的相同排序 key 的数据行进行合并
    以数据分区为单位来聚合数据。当分区合并时,同一数据分区内聚合 Key 相同的数据会被合并汇总,而不同分区之间的数据则不会被汇总。
  • 如果没有指定聚合字段,会怎么聚合
    如果没有指定聚合字段,则会按照非主键的数值类型字段进行聚合。
  • 对于非汇总字段的数据,该保留哪一条
    如果两行数据除了排序字段相同,其他的非聚合字段不相同,那么在聚合发生时,会保留最初的那条数据,新插入的数据对应的那个字段值会被舍弃。

3 AggregatingMergeTree

在这里插入图片描述

3.1 概念

  • 该表引擎继承自 MergeTree,可以使用 AggregatingMergeTree表来做增量数据统计聚合。如果要按一组规则来合并减少行数,则使AggregatingMergeTree 是合适的。AggregatingMergeTree 是通过预先定义的聚合函数计算数据并通过二进制的格式存入表内。
  • 与 SummingMergeTree 的区别在于:SummingMergeTree 对非主键列进行 sum 聚 合,而 AggregatingMergeTree 则可以指定各种聚合函数。对某些字段需要进行聚合时, 需要在创建表字段时指定成 AggregateFunction 类型

3.2 AggregatingMergeTree 建表语句

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.3 搭配使用

  • 以上方式使用 AggregatingMergeTree 表引擎比较不方便,更多情况下,我们将AggregatingMergeTree 作为物化视图的表引擎与 MergeeTree 搭配使用

示例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.CollapsingMergeTree

在这里插入图片描述

4.1 概念

  • CollapsingMergeTree 就是一种通过以增代删的思路,支持行级数据修改和删除的 表引擎。它通过定义一个 sign 标记位字段,记录数据行的状态。如果 sign 标记为 1,则 表示这是一行有效的数据;如果 sign 标记为-1,则表示这行数据需要被删除。当 CollapsingMergeTree 分区合并时,同一数据分区内,sign 标记为 1 和-1的一组数据 会被抵消删除。
  • 每次需要新增数据时,写入一行 sign 标记为 1 的数据;需要删除数据时,则写入一行sign 标记为-1 的数据。此外,只有相同分区内的数据才有可能被折叠。

4.2 建表语句

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.VersionedCollapsingMergeTree

在这里插入图片描述

5.1 概念

  • 上面提到 CollapsingMergeTree 表引擎对于数据写入乱序的情况下,不能够实现数据 折 叠 的 效 果 。 VersionedCollapsingMergeTree 表 引 擎 的 作 用 与CollapsingMergeTree 完 全 相 同 , 它 们 的 不 同 之 处 在 于 ,VersionedCollapsingMergeTree 对数据的写入顺序没有要求,在同一个分区内,任意顺序的数据都能够完成折叠操作。
  • VersionedCollapsingMergeTree 使用 version 列来实现乱序情况下的数据折叠,该引擎除了需要指定一个 sign 标识之外,还需要指定一个 UInt*类型的 version 版本号。

5.2 建表语句

在这里插入图片描述
示例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这篇关于ClickHouse--06--其他扩展MergeTree系列表引擎的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/716443

相关文章

LiteFlow轻量级工作流引擎使用示例详解

《LiteFlow轻量级工作流引擎使用示例详解》:本文主要介绍LiteFlow是一个灵活、简洁且轻量的工作流引擎,适合用于中小型项目和微服务架构中的流程编排,本文给大家介绍LiteFlow轻量级工... 目录1. LiteFlow 主要特点2. 工作流定义方式3. LiteFlow 流程示例4. LiteF

SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程

《SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程》LiteFlow是一款专注于逻辑驱动流程编排的轻量级框架,它以组件化方式快速构建和执行业务流程,有效解耦复杂业务逻辑,下面给大... 目录一、基础概念1.1 组件(Component)1.2 规则(Rule)1.3 上下文(Conte

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析

《Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析》InstantiationAwareBeanPostProcessor是Spring... 目录一、什么是InstantiationAwareBeanPostProcessor?二、核心方法解

MySQL 存储引擎 MyISAM详解(最新推荐)

《MySQL存储引擎MyISAM详解(最新推荐)》使用MyISAM存储引擎的表占用空间很小,但是由于使用表级锁定,所以限制了读/写操作的性能,通常用于中小型的Web应用和数据仓库配置中的只读或主要... 目录mysql 5.5 之前默认的存储引擎️‍一、MyISAM 存储引擎的特性️‍二、MyISAM 的主

MybatisPlus3.3.1整合clickhouse的过程

《MybatisPlus3.3.1整合clickhouse的过程》:本文主要介绍MybatisPlus3.3.1整合clickhouse的过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定... 前言ClickHouse是俄罗斯Yandex发布的一款数据分析型数据库支持sql语法,详情可以访问官网,

Java常用注解扩展对比举例详解

《Java常用注解扩展对比举例详解》:本文主要介绍Java常用注解扩展对比的相关资料,提供了丰富的代码示例,并总结了最佳实践建议,帮助开发者更好地理解和应用这些注解,需要的朋友可以参考下... 目录一、@Controller 与 @RestController 对比二、使用 @Data 与 不使用 @Dat

Spring组件初始化扩展点BeanPostProcessor的作用详解

《Spring组件初始化扩展点BeanPostProcessor的作用详解》本文通过实战案例和常见应用场景详细介绍了BeanPostProcessor的使用,并强调了其在Spring扩展中的重要性,感... 目录一、概述二、BeanPostProcessor的作用三、核心方法解析1、postProcessB

MySQL常见的存储引擎和区别说明

《MySQL常见的存储引擎和区别说明》MySQL支持多种存储引擎,如InnoDB、MyISAM、MEMORY、Archive、CSV和Blackhole,每种引擎有其特点和适用场景,选择存储引擎时需根... 目录mysql常见的存储引擎和区别说明1. InnoDB2. MyISAM3. MEMORY4. A

MySQL InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据

《MySQLInnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据》mysql的ibdata文件被误删、被恶意修改,没有从库和备份数据的情况下的数据恢复,不能保证数据库所有表数据... 参考:mysql Innodb表空间卸载、迁移、装载的使用方法注意!此方法只适用于innodb_fi