MAPREDUCE服务 MRS-ClickHouse表引擎介绍:Distributed表引擎

时间:2024-04-22 14:52:03

Distributed表引擎

Distributed表引擎本身不存储任何数据,而是作为数据分片的透明代理,能够自动路由数据到集群中的各个节点,分布式表需要和其他本地数据表一起协同工作。分布式表会将接收到的读写任务分发到各个本地表,而实际上数据的存储在各个节点的本地表中。
图1 Distributed

Distributed表引擎的创建模板:

ENGINE = Distributed(cluster_name, database_name, table_name, [sharding_key])

Distributed表参数解析如下:

  • cluster_name:集群名称,在对分布式表执行读写的过程中,使用集群的配置信息查找对应的ClickHouse实例节点。
  • database_name:数据库名称。
  • table_name:数据库下对应的本地表名称,用于将分布式表映射到本地表上。
  • sharding_key:分片键(可选参数),分布式表会按照这个规则,将数据分发到各个本地表中。

Distributed表引擎使用示例

--先创建一个表名为test的ReplicatedMergeTree本地表
CREATE TABLE default.test ON CLUSTER default_cluster_1
(
    `EventDate` DateTime, 
    `id` UInt64
)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/default/test', '{replica}')
PARTITION BY toYYYYMM(EventDate)
ORDER BY id

--基于本地表test创建表名为test_all的Distributed表
CREATE TABLE default.test_all ON CLUSTER default_cluster_1
(
    `EventDate` DateTime, 
    `id` UInt64
)
ENGINE = Distributed(default_cluster_1, default, test, rand())

分布式表创建规则:

  • 创建Distributed表时需加上on cluster cluster_name,这样建表语句在某一个ClickHouse实例上执行一次即可分发到集群中所有实例上执行。
  • 分布式表通常以本地表加“_all”命名。它与本地表形成一对多的映射关系,之后可以通过分布式表代理操作多张本地表。
  • 分布式表的表结构尽量和本地表的结构一致。如果不一致,在建表时不会报错,但在查询或者插入时可能会发生异常。
support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_24105.html