表格存储服务 CLOUDTABLE-ClickHouse表引擎概述:Distributed表引擎

时间:2024-10-11 10:34:12

Distributed表引擎

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

图2 Distributed
  • Distributed表引擎创建模板:
    ENGINE = Distributed(cluster_name, database_name, table_name, [sharding_key])
    表6 Distributed表参数说明

    参数

    说明

    cluster_name

    集群名称,在对分布式表执行读写的过程中,使用集群的配置信息查找对应的ClickHouse实例节点。

    database_name

    数据库名称。

    table_name

    数据库下对应的本地表名称,用于将分布式表映射到本地表上。

    sharding_key

    分片键(可选参数),分布式表会按照这个规则,将数据分发到各个本地表中。

  • 使用示例。
    • 先创建一个表名为demo的ReplicatedMergeTree本地表。
      CREATE TABLE default.demo ON CLUSTER default_cluster( `EventDate` DateTime, `id` UInt64)ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/default/demo', '{replica}') PARTITION BY toYYYYMM(EventDate) ORDER BY id;
    • 基于本地表demo创建表名为demo_all的Distributed表。
      CREATE TABLE default.demo_all ON CLUSTER default_cluster( `EventDate` DateTime, `id` UInt64)ENGINE = Distributed(default_cluster, default, demo, rand());
  • 分布式表创建规则。
    • 创建Distributed表时需加上on cluster cluster_name,这样建表语句在某一个ClickHouse实例上执行一次即可分发到集群中所有实例上执行。
    • 分布式表通常以本地表加“_all”命名。它与本地表形成一对多的映射关系,之后可以通过分布式表代理操作多张本地表。
    • 分布式表的表结构尽量和本地表的结构一致。如果不一致,在建表时不会报错,但在查询或者插入时可能会抛出异常。
support.huaweicloud.com/devg-cloudtable/cloudtable_01_0312.html