首批通过分布式安全可靠测评,为关键业务系统打造
创建表组
更新时间:2026-07-16 20:01:47
您可以根据业务需要,创建表组。
使用限制
OceanBase 数据库升级过程中,禁止创建表组。
对于 V4.4.2 版本,从 V4.4.2 BP1 版本开始表组内分区的分布方式由
SHARDING和SCOPE共同决定,当前版本只支持SHARDING属性和SCOPE属性的部分组合,指定不支持的组合会报错。支持的组合包括:SHARDING = 'NONE'+SCOPE = 'SERVER'SHARDING = 'NONE'+SCOPE = 'ZONE'SHARDING = 'NONE'+SCOPE = 'CLUSTER'SHARDING = 'PARTITION'+SCOPE = 'CLUSTER'SHARDING = 'ADAPTIVE'+SCOPE = 'CLUSTER'
语法
创建表组需要当前用户拥有全局 CREATE(*.*)权限。创建表组的 SQL 语句如下:
CREATE TABLEGROUP [IF NOT EXISTS] tablegroup_name
[sharding_option,]
[scope_option];
sharding_option:
SHARDING = '{NONE | PARTITION | ADAPTIVE}'
scope_option:
SCOPE = '{SERVER | ZONE | CLUSTER}'
参数说明:
IF NOT EXISTS:如果尝试创建的表组名称已经存在,且未使用IF NOT EXISTS选项,则会触发错误消息;而指定了IF NOT EXISTS后,不会出现错误,只会生成一条 warning 信息。tablegroup_name:待创建的表组名。sharding_option:用于指定表组SHARDING属性,SHARDING决定了表组内各表之间对应分区的聚合方式,聚合的一组分区称为 Partition Group(分区组),是分布打散的最小单位。取值如下:NONE:表示对加入表组内各表的分区方式无限制,且表之间分区不作聚合。在 V4.4.2 BP1 之前版本中,NONE语义还包含所有分区都在同一日志流上不作打散,新版本去除该语义,具体是否打散还取决于SCOPE属性。- 对于一级分区表: 每个一级分区作为一个独立的 Partition Group。
- 对于二级分区表: 每个二级分区作为一个独立的 Partition Group。
- 对于非分区表: 整个表作为一个 Partition Group。
- 全局索引:
SHARDING = NONE表组内表的全局索引表自动绑定到同一表组。全局非分区索引表整体作为一个 Partition Group,全局分区索引表每个分区作为一个独立的 Partition Group。
PARTITION:整个表组是一个 Balance Group(均衡组),同一一级分区索引的分区聚合在同一 Partition Group。要求加入表组的所有表其对应的一级分区必须与表组中所有表的一级分区的分区定义一致,包括分区类型、分区个数、分区值。相同的分区定义具体指:- 分区类型相同,例如,都是 Range 分区。
- 如果是 Hash 分区,要求引用的列数相同,并且分区个数相同。
- 如果是 Range 分区,要求引用的列数相同,分区数相同,Range 分割点也相同。
ADAPTIVE:默认值,要求加入表组的所有表其对应的一级分区和二级分区必须与表组中所有表的一级分区和二级分区的分区定义一致,包括分区类型、分区个数、分区值。- 全部是一级分区表:整个表组是一个 Balance Group,同一一级分区索引的分区聚合在同一 Partition Group;
- 全部是二级分区表:同一一级分区索引的为一个 Balance Group,Balance Group 下同一二级分区索引的二级分区聚合在同一 Partition Group。
相同的分区定义具体指:
- 分区类型相同,例如,都是 Hash + Range 分区。
- 如果是 Hash 分区,要求引用的列数相同,并且分区个数相同。
- 如果是 Range 分区,要求引用的列数相同,分区数相同,Range 分割点也相同。
- 对于二级分区,根据其分区类型,与一级分区的要求相同。
scope_option:可选项,用于指定表组的SCOPE属性。SCOPE决定了表组内所有聚合后的 Partition Group 的分布范围。取值如下:SERVER:表示所有 Partition Group 的 Leader 聚集在同一节点上。ZONE:表示所有 Partition Group 的 Leader 分布在同一 Zone 内,且打散在 Zone 内各节点。CLUSTER:表示所有 Partition Group 的 Leader 打散在集群内各节点。
表组未指定
SCOPE时,会根据SHARDING属性自动设置为对应的默认SCOPE属性。具体对应关系如下:SHARDING = 'NONE'时,SCOPE取值为SERVER。SHARDING = 'PARTITION'时,SCOPE取值为CLUSTER。SHARDING = 'ADAPTIVE'时,SCOPE取值为CLUSTER。
注意
- 对于 V4.4.2 版本,从 V4.4.2 BP1 版本开始支持表组的
SCOPE属性。 - 低版本升级上来的表组也根据相同规则确定
SCOPE。
分区分布方式
表组内分区的分布方式由 SHARDING 和 SCOPE 共同决定,SHARDING 和 SCOPE 属性的各种组合方式下的分布方式如下:
| SHARDING \ SCOPE | SERVER | ZONE | CLUSTER |
|---|---|---|---|
| NONE | 全部分区聚合到一个节点。
说明等价于 V4.4.2 BP1 之前版本的 |
表组内全部分区平等地在某个 Zone 内打散。 | 表组内全部分区平等地在各节点平均打散。 |
| PARTITION | 不支持 | 暂不支持 | 按一级分区聚合,各 Partition Group 随机打散。
说明等价于 V4.4.2 BP1 之前版本的 |
| ADAPTIVE | 不支持 | 暂不支持 |
说明等价于 V4.4.2 BP1 之前版本的 |
示例
创建
SHARDING = 'NONE'+SCOPE = 'ZONE'的表组tblgroup1。obclient> CREATE TABLEGROUP tblgroup1 SHARDING = 'NONE', SCOPE = 'ZONE';创建
SHARDING = 'NONE'的表组tblgroup2。obclient> CREATE TABLEGROUP tblgroup2 SHARDING = 'NONE';创建
SCOPE = 'CLUSTER'的表组tblgroup3。obclient> CREATE TABLEGROUP tblgroup3 SCOPE = 'CLUSTER';创建仅指定
SCOPE = 'ZONE'的表组会报错。因为SHARDING默认为ADAPTIVE,不支持SHARDING = 'ADAPTIVE'+SCOPE = 'ZONE'的组合。obclient> CREATE TABLEGROUP tblgroup4 SCOPE = 'ZONE';返回结果如下:
ERROR 4179 (HY000): create tablegroup with sharding is ADAPTIVE and scope is ZONE not allowed
后续操作
创建表组后,可以将符合条件的已有表加入到表组中,具体操作请参见 将表添加到表组。