ClickHouse 最初为单机数据库,因此只需要本地表(通常为 MergeTree),后来随着进化为分布式数据库,引入了分布式表与分布式 DDL 的概念,因此目前建一张可在分布式系统中使用的表,需要同时建本地表和分布式表,并且使用分布式 DDL 建上述两张表。
ByteHouse 企业版在历史版本中,参考了 ClickHouse 的原创语法,建表需要建 分布式表+本地表,并采用分布式 DDL。从 v24.9 版本开始,ByteHouse 企业版支持 通用建表模式,支持通过 创建一张表 来完成历史分布式表+本地表的两张表建表操作。
同时,我们也保留了 兼容建表模式,方便存量库表数据的维护。
db.table
后添加on cluster <集群名>
。若不采用分布式 DDL 得前提下,DDL 只能在 Query 的目标节点生效。模式 | 建表操作 | 数据表状态 |
---|---|---|
通用建表模式 | 建MergeTree表 | 一张分布式 MergeTree表 |
兼容建表模式 | 建MergeTree表 | 界面:
|
像用一张 MySQL 表一样增删改查 ByteHouse 表,使得非 ClickHouse 用户可以快速开始使用,在不改变可靠性的情况下,支持:
在这种模式下,MergeTree 表即可作为一个完整的,有分布式查询能力的表使用,我们将新的表称为 分布式 MergeTree 表。
兼容 ClickHouse 社区版的需要同时新建 Distributed 和 Local 2 张表的逻辑。
在这种模式下,管控面将一张本地表和一张分布式表合并为分布式逻辑表(Distributed Logical Table),简称逻辑表;逻辑表仅在管控服务上存在并可见,在引擎不存在。
通用建表模式(新版本支持)
CREATE TABLE db.table ( id Int8 ... ) ENGINE = HaUniqueMergeTree() 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() 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))
如果您的账号拥有管理员权限,您可以在系统后台开启“通用建表模式”。开通此模式后:
警告
“通用建表模式”功能开启后无法关闭,请根据业务情况谨慎选择。