首批通过分布式安全可靠测评,为关键业务系统打造
ALTER TABLEGROUP
更新时间:2024-12-13 23:00:00
描述
该语句用于对一个表组增加多张表和修改表组的属性。
语法
对一个表组增加多张表。
ALTER TABLEGROUP tablegroup_name ADD [TABLE] table_name [, table_name...];修改表组的分区规则。
ALTER TABLEGROUP tablegroup_name tablegroup_option; tablegroup_option: SHARDING = 'NONE' | 'PARTITION' | 'ADAPTIVE'
参数解释
| 参数 | 描述 |
|---|---|
| tablegroup_name | 表组名称。对一个表组增加多张表时,表与表之间以逗号(',')分隔。当添加多个表时,允许表名重复。如果待添加的表已经属于待加入的表组,OceanBase 数据库不会报错。 |
| SHARDING | 表组的属性。如果不指定 SHARDING 属性,则默认创建 ADAPTIVE 的表组。SHARDING 取值如下:
|
示例
创建名为
tblgroup1的表组,其SHARDING属性为NONE,并将分区表tbl1和分区表tbl2加入到表组中。obclient> CREATE TABLEGROUP tblgroup1 SHARDING = 'NONE'; Query OK, 0 rows affected obclient> CREATE TABLE tbl1(col1 INT,col2 VARCHAR(50)) PARTITION BY LIST(col1) SUBPARTITION BY LIST COLUMNS(col2) (PARTITION p0 VALUES in (01) (SUBPARTITION mp0 VALUES in ('01'), SUBPARTITION mp1 VALUES in ('02')), PARTITION p1 VALUES in (02) (SUBPARTITION mp3 VALUES in ('01'), SUBPARTITION mp4 VALUES in ('02')) ); Query OK, 0 rows affected obclient> CREATE TABLE tbl2(col1 INT,col2 VARCHAR(50)) PARTITION BY LIST(col1) SUBPARTITION BY LIST COLUMNS(col2) (PARTITION p0 VALUES in (01) (SUBPARTITION mp0 VALUES in ('01'), SUBPARTITION mp1 VALUES in ('02')), PARTITION p1 VALUES in (02) (SUBPARTITION mp3 VALUES in ('01'), SUBPARTITION mp4 VALUES in ('02')) ); Query OK, 0 rows affected obclient> ALTER TABLEGROUP tblgroup1 ADD tbl1,tbl2; Query OK, 0 rows affected由于
tbl1和tbl2的分区方式一致,所以SHARDING属性可以更改为PARTITION或ADAPTIVE。obclient> ALTER TABLEGROUP tblgroup1 SHARDING = 'PARTITION'; Query OK, 0 rows affected obclient> ALTER TABLEGROUP tblgroup1 SHARDING = 'ADAPTIVE'; Query OK, 0 rows affected创建名为
tblgroup2的表组,其SHARDING属性为NONE,向表组中添加非分区表tbl1和分区表tbl2。obclient> CREATE TABLEGROUP tblgroup2 SHARDING = 'NONE'; Query OK, 0 rows affected obclient> CREATE TABLE tbl1 (col INT); Query OK, 0 rows affected obclient> CREATE TABLE tbl2 (col1 BIGINT PRIMARY KEY,col2 VARCHAR(50)) PARTITION BY LIST(col1) (PARTITION p0 VALUES IN (1, 2, 3), PARTITION p1 VALUES IN (5, 6), PARTITION p2 VALUES IN (DEFAULT) ); Query OK, 0 rows affected obclient> ALTER TABLEGROUP tblgroup2 ADD tbl1,tbl2; Query OK, 0 rows affected由于表组
tblgroup2中包含非分区表和分区表,所以SHARDING属性不能更改为PARTITION或ADAPTIVE。obclient> ALTER TABLEGROUP tblgroup2 SHARDING = 'PARTITION'; ERROR 4179 (HY000): not all tables are non-partitioned or partitioned, modify tablegroup sharding attribute not allowed obclient> ALTER TABLEGROUP tblgroup2 SHARDING = 'ADAPTIVE'; ERROR 4179 (HY000): not all tables are non-partitioned or partitioned, modify tablegroup sharding attribute not allowed创建名为
tblgroup3的表组,其SHARDING属性为NONE,向表组中添加分区表tbl1和分区表tbl2。obclient> CREATE TABLEGROUP tblgroup3 SHARDING = 'NONE'; Query OK, 0 rows affected obclient> CREATE TABLE tbl1(col1 INT,col2 VARCHAR(50)) PARTITION BY LIST(col1) SUBPARTITION BY LIST COLUMNS(col2) (PARTITION p0 VALUES in (01) (SUBPARTITION mp0 VALUES in ('01'), SUBPARTITION mp1 VALUES in ('02'), SUBPARTITION mp2 VALUES in ('03') ), PARTITION p1 VALUES in (02) (SUBPARTITION mp3 VALUES in ('01'), SUBPARTITION mp4 VALUES in ('02'), SUBPARTITION mp5 VALUES in ('03')) ); Query OK, 0 rows affected obclient> CREATE TABLE tbl2(col1 INT,col2 VARCHAR(50)) PARTITION BY LIST(col1) SUBPARTITION BY LIST COLUMNS(col2) (PARTITION p0 VALUES in (01) (SUBPARTITION mp0 VALUES in ('01'), SUBPARTITION mp1 VALUES in ('02')), PARTITION p1 VALUES in (02) (SUBPARTITION mp3 VALUES in ('01'), SUBPARTITION mp4 VALUES in ('02')) ); Query OK, 0 rows affected obclient> ALTER TABLEGROUP tblgroup3 ADD tbl1,tbl2; Query OK, 0 rows affected由于表组
tblgroup3中tbl1和tbl2的一级分区的分区类型相同,二级分区分区类型不同(二级分区个数不同),所以SHARDING属性可以更改为PARTITION,但是不能更改为ADAPTIVE。obclient> ALTER TABLEGROUP tblgroup3 SHARDING = 'PARTITION'; Query OK, 0 rows affected obclient> ALTER TABLEGROUP tblgroup3 SHARDING = 'ADAPTIVE'; ERROR 4179 (HY000): subpartition num not matched, modify tablegroup sharding attribute not allowed创建名为
tblgroup4的表组,其SHARDING属性为ADAPTIVE,修改表组中表tbl1和表tbl2的分区个数,则表组中所有表此时分区方式不一致,表组中不能加入新的表tbl3。obclient> CREATE TABLEGROUP tblgroup4 SHARDING = 'ADAPTIVE'; Query OK, 0 rows affected obclient> CREATE TABLE tbl1(col1 INT,col2 INT) PARTITION BY RANGE(col1) SUBPARTITION BY RANGE(col2) SUBPARTITION TEMPLATE (SUBPARTITION mp0 VALUES LESS THAN(2020), SUBPARTITION mp1 VALUES LESS THAN(2021), SUBPARTITION mp2 VALUES LESS THAN(2022)) (PARTITION p0 VALUES LESS THAN(100), PARTITION p1 VALUES LESS THAN(200)); Query OK, 0 rows affected obclient> CREATE TABLE tbl2(col1 INT,col2 INT) PARTITION BY RANGE(col1) SUBPARTITION BY RANGE(col2) SUBPARTITION TEMPLATE (SUBPARTITION mp0 VALUES LESS THAN(2020), SUBPARTITION mp1 VALUES LESS THAN(2021), SUBPARTITION mp2 VALUES LESS THAN(2022)) (PARTITION p0 VALUES LESS THAN(100), PARTITION p1 VALUES LESS THAN(200)); Query OK, 0 rows affected obclient> ALTER TABLEGROUP tblgroup4 ADD tbl1,tbl2; Query OK, 0 rows affected obclient> ALTER TABLE tbl1 ADD PARTITION (PARTITION p3 VALUES LESS THAN(400), PARTITION p4 VALUES LESS THAN(500)); Query OK, 0 rows affected obclient> ALTER TABLE tbl2 DROP SUBPARTITION p0smp0,p0smp1; Query OK, 0 rows affected obclient> CREATE TABLE tbl3(col1 INT,col2 INT) PARTITION BY RANGE(col1) SUBPARTITION BY RANGE(col2) SUBPARTITION TEMPLATE (SUBPARTITION mp0 VALUES LESS THAN(2020), SUBPARTITION mp1 VALUES LESS THAN(2021), SUBPARTITION mp2 VALUES LESS THAN(2022)) (PARTITION p0 VALUES LESS THAN(100), PARTITION p1 VALUES LESS THAN(200)); Query OK, 0 rows affected obclient> ALTER TABLEGROUP tblgroup4 ADD tbl3; ERROR 4179 (HY000): partition num not equal, add table to tablegroup not allowed