ClickHouse学习小记--MergeTree原理

本文详细介绍了ClickHouse的MergeTree表引擎,包括创建方式、存储结构、数据分区和一级索引。MergeTree通过后台线程定期合并数据片段,支持主键索引、数据分区等特性。数据以分区目录的形式存储,一级索引通过稀疏索引加速查询。分区规则由分区键决定,索引粒度默认为8192行,影响索引、数据标记和数据文件的间隔。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MergeTree原理解析

表引擎是ClickHouse设计实现中的一大特色。可以说,是表引擎决定了一张数据表最终的“性格”,比如数据表拥有何种特性、数据以何种形式被存储以及如何被加载。ClickHouse拥有非常庞大的表引擎体系,其共拥有合并树、外部存储、内存、文件、接口和其他6大类20多种表引擎。
在生产环境的绝大部分场景中,都会使用合并树(MergeTree)表引擎及其家族系列(*MergeTree)的表引擎。

  • 只有合并树系列的表引擎才支持主键索引、数据分区、数据副本和数据采样等特性
  • 只有此系列的表引擎支持ALTER相关操作

合并树家族自身也拥有多种表引擎的变种。其中MergeTree作为家族中最基础的表引擎,提供了主键索引、数据分区、数据副本和数据采样等基本能力,而家族中其他的表引擎则在MergeTree的基础之上各
有所长。例如ReplacingMergeTree表引擎具有删除重复数据的特性,而SummingMergeTree表引擎则会按照排序键自动聚合数据。如果给合并树系列的表引擎加上Replicated前缀,又会得到一组支持数据副本的表引擎,例如ReplicatedMergeTree、ReplicatedReplacingMergeTree、 ReplicatedSummingMergeTree等。
合并树表引擎家族如图6-1所示。
在这里插入图片描述

虽然合并树的变种很多,但MergeTree表引擎才是根基。作为合并树家族系列中最基础的表引擎,MergeTree具备了该系列其他表引擎共有的基本特征,所以吃透了MergeTree表引擎的原理,就能够掌握该系列引擎的精髓。

一、MergeTree的创建方式与存储结构

MergeTree在写入一批数据时,数据总会以数据片段的形式写入磁盘,且数据片段不可修改。为了避免片段过多,ClickHouse会通过后台线程,定期合并这些数据片段,属于相同分区的数据片段会被合成一个新的片段。这种数据片段往复合并的特点,也正是合并树名称的由来。

1、MergeTree的创建方式

创建MergeTree数据表的方法,与之前介绍的定义数据表的方法大致相同,但需要将ENGINE参数声明为MergeTree(),完整的语法如下所示:

CREATE TABLE [IF NOT EXISTS] [db_name.]table_name 
( name1 [type] [DEFAULT|MATERIALIZED|ALIAS expr], 
  name2 [type] [DEFAULT|MATERIALIZED|ALIAS expr],
  省略... ) 
ENGINE = MergeTree() 
[PARTITION BY expr] 
[ORDER BY expr] 
[PRIMARY KEY expr] 
[SAMPLE BY expr]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值