数据库是数据的逻辑分组,每个数据库包含许多表,表是存放数据的地方,由结构化的行和列组成。本文介绍了如何在 ByteHouse 企业版中创建数据库、表以及如何克隆表。
创建数据库
您可以根据业务场景创建多个数据库,同时在创建表时也需要选择目标数据库。因此,如果当前集群中未存在数据库时,请先进行创建。具体操作步骤如下:
- 登录 ByteHouse 企业版控制台,进入数据管理界面。

- 在左上角下拉选择已创建成功的集群。如果您需要创建新集群,请参见创建集群。

- 在左侧点击➕ 新建按钮,选择创建库。

- 自定义数据库名称及描述。

其中,数据库名称命名规则如下:
- 请以字母或下划线开头,支持数字,字母及下划线。
- 不能使用关键字: 'system', 'default' or 'admin'。
- 最大长度不超过 63 字符。
- 单击创建按钮,完成数据库创建。
创建数据表
- 登录 ByteHouse 企业版控制台,进入数据管理界面。

- 在左上角下拉选择已创建成功的集群。

- 在左侧点击➕ 新建按钮,您可通过创建表(可视化建表)、基于 DDL 模板建表和批量建表方式来新建数据表。具体操作请参见下文对应章节。

可视化建表
操作步骤:
单击创建表,进入建表页面。
配置表基本信息。

参数 | 配置说明 |
|---|
集群 & 数据库 | 选择已创建的集群和数据库,后续表会创建在此集群和数据库中。 |
表引擎 | - 默认为 HaMergeTree,和社区的 ReplicatedMergeTree 引擎基本兼容,详情可参见HaMergeTree。
- 如果需要根据唯一键去重功能,请选择 HaUniqueMergeTree,选此引擎后,才可以选择唯一键、生效范围、版本字段,使用方式参考:HaUniqueMergeTree。
|
数据表名称 & 描述 | 自定义表名称与描述信息。 |
配置表的列信息。您可点击上传导入批量导入表的列信息,也可在界面单击添加列按钮手动逐条添加列,或单击下方添加多行手动添加多个列。

列信息中:
配置表的高级键信息。在页面下方配置表的排序键、分区键、分片键等。

参数 | 配置说明 |
|---|
排序键(ORDER BY) | ByteHouse 为提升查询性能,存储数据时将按排序索引的顺序组织数据,核心规则与配置建议如下: - 字段约束:排序键支持非唯一值,但不可设为 Nullable 类型;
- 配置建议:
- 优先选择 1-3 个高频作为查询过滤条件的字段,使用频率越高,排序优先级应越高;
- 若多个字段使用频率相近,建议将基数较小的字段置于更优先的排序位置;
- 分区字段无需作为排序索引,二者可独立配置。
|
分区键(PARTITION BY) | 可选类型: - 时间类型(Date/DateTime),选择时间类型为最佳实践,仅当选择时间分区时才可设置 TTL(数据生命周期)。分区粒度可选 DAY(按日),HOUR(按小时),MONTH(按月)。
注意 建议单天数据量 > 100 亿才考虑按小时分区,或数据量过小时可选按月分区,否则建议采用按日分区。 - 数字类型(Int / UInt / Float)
- 字符串类型(String)
- 如果无需进行分区时,可以不选分区键。
- 分区字段不可以为 Nullable。
用于数据分片存储,支持多类型配置。 - 可选数据类型:
- 时间类型(Date/DateTime):设置为时间类型为最佳实践。分区粒度可选 DAY(按日)、HOUR(按小时)、MONTH(按月)。仅当分区键设为此类型时,ByteHouse 才支持为表配置 TTL(数据生命周期)。
注意 建议单天数据量 > 100 亿考虑按小时(HOUR)分区,或数据量过小时,可选按月分区,否则建议采用按日分区。 - 数字类型(Int/UInt/Float)
- 字符串类型(String)
- 如果无需分区优化查询/管理数据时,可不配置分区键。
- 分区字段不可为 Nullable 类型。
|
数据生命周期(TTL) | 用于设置数据保留规则,生效粒度为表级别。
数据保留时间是以“分区字段”作为基础进行计算,因此,对于非时间分区的表将无法设置 TTL,系统将强制修改为永久保留。 - 开启转至冷存储后,对于访问频次较低的数据,可存储在较低价的冷数据盘中,满足高性价比的存储需求。使用 HaUniqueMergeTree 引擎时,不按照本地存储上限进行移动。
- 开启删除数据后,可将不需要的数据按照时间周期删除,降低存储成本。
|
分片键
(HaMergeTree 引擎需配置) | 分片字段用于确保一列数据均匀分布在集群各节点下,最大化利用集群性能提升查询效率。
通常选择取经常出现在 Group by 中的字段作为分片字段。
分片字段仅支持 String/Int/UInt/Date/DateTime/DateTime64 类型,并且不可为 Nullable 类型。 |
唯一键
(HaUniqueMergeTree 引擎需配置) | 唯一键用于选取字段作为数据去重 (upsert) 的判断标准,支持多字段配置。 - 唯一键(必填):每个表只能有一个唯一键,支持最多 3 个字段构成组合键。如果超过 3 个字段,您可自行计算所有唯一字段的 64 位哈希值,并用该哈希字段作为唯一键。如果是有符号哈希值,则需要使用 Int64 类型。
- 唯一键作用范围(必填):包含两种类型
- 如果是【分区粒度唯一】,需保证唯一键在分区内的唯一性。
- 如果是【表粒度唯一】,需保证唯一键在表内的唯一性。表粒度唯一有额外的写入开销,建议优先使用分区粒度唯一。
- 版本字段(选填):写入相同唯一键的多条数据时,默认保留最新写入的数据。如果指定了版本字段,将保留版本最大的数据。如果使用表粒度唯一,可以额外使用分区表达式作为版本字段,即相同唯一键保留最新分区的数据。
|
跳数索引(INDEX) | 若查询条件中包含跳数索引中的字段,可以预先过滤数据、减少 IO,从而加速查询效率。您可以在界面中选择需设置为跳数索引的列,并设置跳数索引的类型。
当前支持以下类型索引:set、minmax、bloom_filter、tokenbf_v1、ngrambf_v1,支持配置的参数如下: - 通用参数:
- GRANULARITY(索引粒度):所有类型的索引均支持设置 GRANULARITY,控制台设定的默认值均为 1。通常建议设置为 1,以获得更高的过滤率。GRANULARITY 值越大存储占用越少,相应的过滤效果也可能减弱。当前支持配置的范围为 1~10。
- 专属参数:不同索引支持配置的参数不同,请按需配置。
set:支持设置单个参数,即每个数据块的值集的最大大小。取值范围为 0~256。当该参数设置为 0 时,允许存储无限数量的离散值。如果数据块中值的数量超过该最大容量,索引将为空。minmax:无专属参数。bloom_filter:支持设置允许的“误报率”,取值范围为 0~1。若未指定,默认值为 0.025,此参数为可选配置。不适用于 Map、JSON、Geometry 数据类型。tokenbf_v1:仅适用于 String、FixedString 数据类型,支持设置三个参数:
- 过滤器大小:以字节为单位,过滤器越大,误报率越低,但存储成本会相应增加;
- 哈希函数数量:哈希函数数量越多,误报率越低;
- 布隆过滤器哈希函数的种子值。
ngrambf_v1:仅适用于 String、FixedString 数据类型,支持设置四个参数:
- ngram长度;
- 过滤器大小:以字节为单位,过滤器越大,误报率越低,但存储成本会相应增加;
- 哈希函数数量:哈希函数数量越多,误报率越低;
- 布隆过滤器哈希函数的种子值。
更多跳数索引的使用说明请参见跳数索引。 注意 跳数索引在建表后无法通过可视化方式修改,请谨慎操作。 |
填写完成后可以单击右下角的创建提交建表任务,若无报错信息,则表示创建成功。
DDL 模板建表
操作步骤:
- 单击以DDL模版创建,在 DDL 模版页面选择所需的 DDL 模板,单击使用该模版,系统将自动跳转至查询窗口,您可按需修改表字段。

- 修改完成后,选择全部节点,单击运行,即可创建表。

批量建表
操作步骤:
单击批量建表,在批量建表页面选择数据库,在编辑框中输入相应建表语句。建表语句详细说明请参见 SQL 语法。

在编辑框中,您还可以执行以下操作:
操作 | 说明 |
|---|
下载 SQL | 将编辑器中编辑的 SQL 语句,下载至本地保存。 |
上传 SQL | 将需执行的 SQL 语句,以本地文件的形式,通过上传方式,上传至编辑器中批量执行。 |
SQL 格式化 | 将书写的 SQL 进行格式化操作,增加语句可读性。 |
复制 SQL | 可对写好的 SQL 语句进行复制操作。 |
清除所有 SQL | 将编辑器中书写好的所有 SQL 语句,进行清除。 |
单击优化 SQL,系统将根据内置规则调整 SQL 语句,使其更符合 ByteHouse 建表的最佳实践。
单击已优化,下一步,在预览表格页面预览表配置信息,确认无误后,单击创建。
系统将提示“批量建表任务已提交”,表示任务提交成功。

在数据管理页面的列表中单击刷新按钮,在对应的数据库下查看已创建的表。
非可视化方式建表
如果您通过 CLI 客户端、JDBC 或其他非可视化方式建表,相关表结构与数据将会按照 5 分钟周期同步至 ByteHouse 企业版控制台。ByteHouse 支持同步的表引擎及对应同步规则如下:
- 同步为“逻辑表”:关联了 Distributed 表的 HaMergeTree 表或 HaUniqueMergeTree 表,将被同步为“逻辑表”。此类表与在 ByteHouse 企业版控制台上创建的表功能一致,且符合 ByteHouse 建表最佳实践,因此,可在 ByteHouse 企业版控制台上正常执行改表、删除分区、创建导入任务等操作。
- 同步为“自定义表”:未关联 Distributed 表的 HaMergeTree 表或 HaUniqueMergeTree 表,或社区的其他 MergeTree 家族表(如 MergeTree,DuplicatedMergeTree 等),由于不符合 ByteHouse 建表最佳实践,将被同步为“自定义表”。此类表仅在 ByteHouse 企业版控制台上展示,支持查询此类表,但不支持执行改表、删除分区、创建导入任务等操作。
- 同步为“外表”:MySQL、S3、Hive 等 Integration 引擎表,将被同步为“外表”。该类表仅会在 ByteHouse 企业版控制台上展示,支持查询此类表,但不支持执行改表、删除分区、创建导入任务等操作。需注意,Integration 引擎中,Kafka 引擎、RabbitMQ 引擎的表,因查询此类表会导致数据丢失,暂时不会被同步。
克隆表
克隆表是指使用与原始表相同的模式和数据创建新表。
操作步骤:
在数据管理页面,单击作为原始表的数据表,进入详情页。
单击右上角的 ... 按钮,单击克隆。
单击可视化克隆或以 SQL 克隆。
克隆方式 | 操作说明 |
|---|
可视化克隆 | 系统将跳转至克隆数据表页面,您可参考可视化建表中的配置说明,配置克隆表的信息。配置完成后,单击克隆,系统将自动创建克隆表。 |
以 SQL 克隆 | 系统将跳转至 SQL 编辑页面,您可按需调整建表命令。编辑完成后,单击运行,系统将自动创建克隆表。 |