You need to enable JavaScript to run this app.
导航
建表模式
最近更新时间:2024.11.22 11:39:29首次发布时间:2024.11.05 15:06:37

ClickHouse 最初为单机数据库,因此只需要本地表(通常为 MergeTree),后来随着进化为分布式数据库,引入了分布式表与分布式 DDL 的概念,因此目前建一张可在分布式系统中使用的表,需要同时建本地表和分布式表,并且使用分布式 DDL 建上述两张表。
ByteHouse 企业版在历史版本中,参考了 ClickHouse 的原创语法,建表需要建 分布式表+本地表,并采用分布式 DDL。从 v24.9 版本开始,ByteHouse 企业版支持 通用建表模式,支持通过 创建一张表 来完成历史分布式表+本地表的两张表建表操作。
同时,我们也保留了 兼容建表模式,方便存量库表数据的维护。

基本概念

  • 本地表(Local Table):用于存储本地数据的表,常用表引擎为 MergeTree 家族,如 HaMergeTree;
  • 分布式表(Distributed Table):用于分发查询与插入请求的表,表引擎为 Distributed;
  • 分布式 DDL(Distributed DDL):用于指定 DDL 在集群上每个节点创建的语法,用法为在 DDL 的 db.table 后添加on cluster <集群名>。若不采用分布式 DDL 得前提下,DDL 只能在 Query 的目标节点生效。

建表模式差异

概念对比

模式

建表操作

数据表状态

通用建表模式

建MergeTree表
(无需分布式DDL)

一张分布式 MergeTree表

兼容建表模式

建MergeTree表
建Distributed表
(都需要分布式DDL)

界面:
一张分布式逻辑表
底层:

  • 一张 MergeTree 表
  • 一张 Distributed 表

通用建表模式

像用一张 MySQL 表一样增删改查 ByteHouse 表,使得非 ClickHouse 用户可以快速开始使用,在不改变可靠性的情况下,支持:

  • 不需要 on cluster,自动执行分布式 DDL。
  • 不需要建 Distributed 表。

在这种模式下,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))

开启通用建表模式

如果您的账号拥有管理员权限,您可以在系统后台开启“通用建表模式”。开通此模式后:

  • 控制台可显示、使用通用建表SQL语句。
  • 命令行仍然兼容传统建表SQL语法。

警告

“通用建表模式”功能开启后无法关闭,请根据业务情况谨慎选择。

  1. 进入火山引擎 ByteHouse 企业版控制台,点击右上角“个人中心”按钮,选择“系统设置”项。

Image

  1. 您可以:
    1. 点击集群右侧的按钮,为特定的集群开启“通用建表模式”。
    2. 开启“新建集群默认开启通用建表”,操作后续所有新建集群将默认采用“通用建表模式”。

Image