目录

一、ClickHouse的表引擎

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

2、ReplacingMergeTree

二、数据分片与分布式查询

三、Clickhouse-ETL常见业务使用


一、ClickHouse的表引擎

表引擎体系,包括合并树、外部存储、内存、文件、接口和其他6大类20多种表引擎。而在这众多的表引擎中,又属合并树(MergeTree)表引擎及其家族系列(*MergeTree)最为强大。

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

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

MergeTree拥有主键,但是它的主键却没有唯一键的约束,因此即便多行数据的主键相同,它们还是能够被正常写入

2、ReplacingMergeTree

ReplacingMergeTree就是为了数据去重而设计的,它能够在合并分区时删除重复的数据。但是只能在一定程度上去重,这是因为ReplacingMergeTree是以分区为单位删除重复数 据的。只有在相同的数据分区内重复的数据才可以被删除,而不同数据分区之间的重复数据依然不能被剔除。

二、数据分片与分布式查询

为了解决数据表容量的问题,引入了数据分片,一张分片表有两部分组成:本地表和分布式表

本地表通常以_local为后缀进行命名,一张本地表对应一个数据分片。与传统关系型数据库不同的是,ClickHouse 是分布式系统,如何创建分布式表呢?

ClickHouse 的设计是:

  • 先在每个 Shard 每个节点上创建本地表(即 Shard 的副本),本地表只在对应节点内可见
  • 然后再创建分布式表,映射到前面创建的本地表。

这样用户在访问分布式表时,ClickHouse 会自动根据集群架构信息,把请求转发给对应的本地表。

三、Clickhouse-ETL常见业务使用

业务中常见的ETL使用场景举例: