ByteHouse 支持通用建表模式和兼容建表模式,本文将介绍两种建表模式的差异,以及如何开启通用建表模式。
ClickHouse 最初为单机数据库,因此只需要本地表(通常为 MergeTree),后来随着进化为分布式数据库,引入了分布式表与分布式 DDL 的概念,因此目前建一张可在分布式系统中使用的表,需要使用分布式 DDL 同时建本地表和分布式表。
ByteHouse 企业版在历史版本中,参考了 ClickHouse 的原创语法,建表需要建分布式表+本地表,并采用分布式 DDL。从 v24.9 版本开始,ByteHouse 企业版支持通用建表模式,支持通过创建一张表来完成历史分布式表+本地表的两张表的建表操作。同时,ByteHouse 也保留了兼容建表模式,方便存量库表数据的维护。
HaMergeTree。Distributed。db.table 后添加 ON CLUSTER <集群名>。若不采用分布式 DDL,建表 DDL 仅在执行操作的目标节点生效。模式 | 建表操作 | 数据表状态 |
|---|---|---|
通用建表模式 | 建 MergeTree 表 | 一张分布式 MergeTree 表 |
兼容建表模式 | 建 MergeTree 表 | 界面:
|
在通用建表模式下,您可以像使用一张 MySQL 表一样,增删改查 ByteHouse 表,使得非 ClickHouse 用户可以快速开始使用,在不改变可靠性的情况下,支持以下特性:
在这种模式下,MergeTree 表即可作为一个完整的、有分布式查询能力的表使用,我们将新的表称为分布式 MergeTree 表。
此模式兼容 ClickHouse 社区版需要同时新建 Distributed 表和 Local 表的逻辑。
在这种模式下,ByteHouse 控制台将一张本地表和一张分布式表合并为分布式逻辑表(Distributed Logical Table),简称逻辑表;逻辑表仅在控制台服务上存在并可见,在引擎不存在。
以下仅为基本语法对比示例,详细建表语法请参见新建数据库/表:基于 DDL 模版。
通用建表模式(新版本支持)
CREATE TABLE db.table ( id Int8 ... ) ENGINE = HaUniqueMergeTree( '/clickhouse/0/cluster_name/db.table_17658700573/{shard}', '{replica}') UNIQUE KEY (id) ORDER BY id SETTINGS enable_common_table_mode = 1, // enable_common_table_mode=1 表示使用“通用建表模式” cluster_name = 'bytehouse_test', // 集群名称 sharding_key='cityHash64(id)';
兼容建表模式(传统方式)
-- 本地表 CREATE TABLE db.table_local ON CLUSTER bytehouse_test ( id Int8 ... ) ENGINE = HaUniqueMergeTree( '/clickhouse/0/cluster_name/default.db.table_local_17658700575/{shard}', '{replica}') UNIQUE KEY (id) ORDER BY id; -- 分布式表 CREATE TABLE db.table ON CLUSTER bytehouse_test As table_local ENGINE = Distributed(bytehouse_test, db,table_local, cityHash64(id))
如果您的账号拥有管理员权限,您可以在系统后台开启“通用建表模式”。开通此模式后:
注意
“通用建表模式”功能开启后无法关闭,请根据业务情况谨慎选择。
操作步骤: