首批通过分布式安全可靠测评,为关键业务系统打造
创建分区表表组
更新时间:2026-06-15 15:49:08
本文主要介绍如何在 OceanBase 数据库的 MySQL 模式中创建分区表表组。
注意事项
当前仅具备租户管理员权限的用户才能创建表组。
创建分区表表组前,需要指定表组的分区策略,表组的分区策略需要与待加入表组的分区表的分区策略一致。
创建分区表表组后,表组内的表不能单独进行分区管理操作,只能通过表组对分区表进行分区的统一管理。
支持的分区类型
OceanBase 数据库的 MySQL 模式支持创建一级分区表表组及模板化的二级分区表表组。
一级分区表表组的分区类型支持情况如下表所示。
| 一级分区类型 | 一级分区表表组 |
|---|---|
| Range / List | 不支持 |
| Range Columns / List Columns / Hash / Key | 支持 |
二级分区表表组的分区类型支持情况如下表所示。
说明
当前版本不支持创建非模板化分区表表组。
| 二级分区类型 | 模板化二级分区表表组 |
|---|---|
| Range Columns + List Columns / Range Columns + Hash / Range Columns + Key / List Columns + Hash / List Columns + Key / List Columns + Range Columns | 支持 |
创建一级分区表表组
当前支持创建基于 Range Columns 分区、List Columns 分区、Hash 分区和 Key 分区的表组。仅具备租户管理员权限的用户才能创建表组。
语法
CREATE TABLEGROUP tablegroup_name
[opt_tablegroup_option_list] [opt_tg_partition_option]
opt_tablegroup_option_list:
tablegroup_option [tablegroup_option]
tablegroup_option:
LOCALITY [=] locality_name
| PRIMARY_ZONE [=] primary_zone_name
opt_tg_partition_option:
PARTITION BY
KEY column_num PARTITIONS INTNUM
| HASH PARTITIONS INTNUM
| RANGE COLUMNS column_num {PARTITION partition_name VALUES LESS THAN range_partition_expr, ...}
| LIST COLUMNS column_num {PARTITION partition_name VALUES IN list_partition_expr, ...}
参数解释
| 参数 | 描述 |
|---|---|
| tablegroup_name | 表组名称,最长 64 个字符,字符只能有大小写英文字母,数字和下划线,而且必须以字母或下划线开头,并且不能使用 OceanBase 数据库的关键字。 如果要创建的表组名称已存在,并且没有指定 IF NOT EXISTS,则会出现错误。 |
| opt_tablegroup_option_list | 数据表的分区方式、Locality、Primary Zone 必须和表组完全一致。
注意 组内的表信息不能独立变更某一项,只可以通过操作表组进行批量操作。 |
| opt_tg_partition_option | 表组的分区规则定义,与 CREATE TABLE 使用同样的分区方式。 表组没有具体的列定义,所以 KEY、RANGE COLUMNS、LIST COLUMNS 不需要写出具体的列,只需要指定列个数(COLUMN_NUM)。 |
| COLUMN_NUM | 代表分区键数目。 |
示例
创建 Range Columns 分区的表组。
obclient> CREATE TABLEGROUP tblgroup1 PARTITION BY RANGE COLUMNS 1 ( PARTITION p0 VALUES LESS THAN(100), PARTITION p1 VALUES LESS THAN(200) ); Query OK, 0 rows affected创建 List Columns 分区的表组。
obclient> CREATE TABLEGROUP tblgroup1 PARTITION BY LIST COLUMNS 1 ( PARTITION p_northwest VALUES IN('OR', 'WA'), PARTITION p_southwest VALUES IN('AZ', 'UT', 'NM') ); Query OK, 0 rows affected创建 Hash 分区的表组。
obclient> CREATE TABLEGROUP tg1_h PARTITION BY HASH PARTITIONS 10; Query OK, 0 rows affected创建 Key 分区的表组。
obclient> CREATE TABLEGROUP tblgroup1 PARTITION BY KEY 1 PARTITIONS 10; Query OK, 0 rows affected
创建模板化二级分区表表组
语法
CREATE TABLEGROUP [IF NOT EXISTS] tablegroupname [opt_tablegroup_option_list] [opt_tg_partition_option]
opt_tablegroup_option_list:
tablegroup_option [tablegroup_option]
tablegroup_option:
LOCALITY [=] locality_name
| PRIMARY_ZONE [=] primary_zone_name
opt_tg_partition_option:
PARTITION BY
KEY column_num [tg_subpartition_option] PARTITIONS int_num
| HASH [tg_subpartition_option] PARTITIONS INTNUM
| RANGE COLUMNS column_num [tg_subpartition_option]
{PARTITION partition_name VALUES LESS THAN range_partition_expr, ...}
| LIST COLUMNS column_num [tg_subpartition_option]
{PARTITION partition_name VALUES IN list_partition_expr, ...}
tg_subpartition_option:
SUBPARTITION BY
RANGE COLUMNS column_num SUBPARTITION TEMPLATE
{SUBPARTITION partition_name VALUES LESS THAN range_partition_expr, ...}
| HASH SUBPARTITIONS INTNUM
| KEY column_num SUBPARTITIONS INTNUM
| LIST COLUMNS column_num SUBPARTITION TEMPLATE
{SUBPARTITION partition_name VALUES IN list_partition_expr, ...}
示例
创建 Range Columns + List Columns 分区的模板化二级分区表表组。
obclient> CREATE TABLEGROUP tg2_m_rclc PARTITION BY RANGE COLUMNS 1 SUBPARTITION BY LIST COLUMNS 1 SUBPARTITION TEMPLATE (SUBPARTITION mp0 VALUES IN('A','B'), SUBPARTITION mp1 VALUES IN('C','D'), SUBPARTITION mp2 VALUES IN('E','F') ) (PARTITION p0 VALUES LESS THAN(100), PARTITION p1 VALUES LESS THAN(200), PARTITION p2 VALUES LESS THAN(300) ); Query OK, 0 rows affected创建 Range Columns + Hash 分区的模板化二级分区表表组。
obclient> CREATE TABLEGROUP tg2_m_rch PARTITION BY RANGE COLUMNS 1 SUBPARTITION BY HASH SUBPARTITIONS 5 (PARTITION p0 VALUES LESS THAN(100), PARTITION p1 VALUES LESS THAN(200), PARTITION p2 VALUES LESS THAN(300) ); Query OK, 0 rows affected创建 Range Columns + Key 分区的模板化二级分区表表组。
obclient> CREATE TABLEGROUP tg2_m_rck PARTITION BY RANGE COLUMNS 1 SUBPARTITION BY KEY 1 SUBPARTITIONS 3 (PARTITION p0 VALUES LESS THAN(100), PARTITION p1 VALUES LESS THAN(200), PARTITION p2 VALUES LESS THAN(300) ); Query OK, 0 rows affected创建 List Columns + Range Columns 分区的模板化二级分区表表组。
obclient> CREATE TABLEGROUP tg2_m_lcrc PARTITION BY LIST COLUMNS 1 SUBPARTITION BY RANGE COLUMNS 1 SUBPARTITION TEMPLATE (SUBPARTITION mp0 VALUES LESS THAN(100), SUBPARTITION mp1 VALUES LESS THAN(200), SUBPARTITION mp2 VALUES LESS THAN(300) ) (PARTITION p0 VALUES IN('A','B'), PARTITION p1 VALUES IN('C','D'), PARTITION p2 VALUES IN('E','F') ); Query OK, 0 rows affected创建 List Columns + Hash 分区的模板化二级分区表表组。
obclient> CREATE TABLEGROUP tg2_m_lch PARTITION BY LIST COLUMNS 1 SUBPARTITION BY HASH SUBPARTITIONS 5 (PARTITION p0 VALUES IN('01','02'), PARTITION p1 VALUES IN('03','04'), PARTITION p2 VALUES IN('05','06') ); Query OK, 0 rows affected创建 List Columns + Key 分区的模板化二级分区表表组。
obclient> CREATE TABLEGROUP tg2_m_lck PARTITION BY LIST COLUMNS 1 SUBPARTITION BY KEY 1 SUBPARTITIONS 5 (PARTITION p0 VALUES IN('01','02'), PARTITION p1 VALUES IN('03','04'), PARTITION p2 VALUES IN('05','06') ); Query OK, 0 rows affected