説明
このステートメントは、テーブルグループに複数のテーブルを追加し、テーブルグループの属性を変更するために使用します。
使用上の制限と注意事項
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'
構文
ALTER TABLEGROUP tablegroup_name
{ADD [TABLE] table_name_list
| [sharding_option,] [scope_option]
};
table_name_list:
table_name [, table_name ...]
sharding_option:
SHARDING = '{NONE | PARTITION | ADAPTIVE}'
scope_option:
SCOPE = '{SERVER | ZONE | CLUSTER}'
パラメータの説明
パラメータ |
説明 |
|---|---|
| tablegroup_name | 変更対象のテーブルグループ名。 |
| ADD [TABLE] table_name_list | テーブルグループにテーブルを追加するために使用します。テーブルグループに複数のテーブルを追加する場合、テーブルとテーブルの間はカンマ(,)で区切ります。複数のテーブルを追加する場合、テーブル名の重複は許可されます。追加するテーブルが既に対象のテーブルグループに属している場合、OceanBaseデータベースはエラーを報告しません。 |
| sharding_option | オプションです。テーブルグループのSHARDING属性を変更するために使用します。SHARDINGは、テーブルグループ内の各テーブル間で対応するパーティションの集約方法を決定します。集約された一連のパーティションをPartition Group(パーティショングループ)と呼び、これは分散の最小単位です。詳細については、後述のsharding_optionを参照してください。 |
| scope_option | オプションです。テーブルグループのSCOPE属性を変更するために使用します。SCOPEは、テーブルグループ内のすべての集約されたPartition Groupの分散範囲を決定します。詳細については、後述のscope_optionを参照してください。
説明V4.4.2バージョンでは、V4.4.2 BP1バージョン以降、テーブルグループの |
sharding_option
NONE:テーブルグループに追加するテーブルに制限がないことを示します。PARTITION:テーブルグループに追加するテーブルに対応するパーティションのパーティション分割方法が、テーブルグループ内のすべてのテーブルのパーティション分割方法と一致する必要があることを示します。これには、パーティションタイプ、パーティション数、パーティション値が含まれます。ADAPTIVE:テーブルグループに追加するテーブルに対応するパーティションとサブパーティションのパーティション分割方法が、テーブルグループ内のすべてのテーブルのパーティションとサブパーティションのパーティション分割方法と一致する必要があることを示します。これには、パーティションタイプ、パーティション数、パーティション値が含まれます。テーブルグループに追加するテーブルは、同一の種類のパーティションテーブル(パーティションテーブルまたはサブパーティションテーブル)でなければなりません。
同じパーティション分割方法には以下が含まれます:
- パーティションタイプが同じであること(例えば、どちらもHash + Rangeパーティション)。
- Hashパーティションの場合、参照する列数が同じで、パーティション数が同じであること。
- Rangeパーティションの場合、参照する列数が同じで、パーティション数が同じで、Rangeの分割ポイントが同じであること。
サブパーティションについても、そのパーティションタイプに応じて、上記の要件が適用されます。
scope_option
SERVER:すべてのPartition Groupのリーダーが同一ノードに集約されていることを示します。ZONE:すべてのPartition Groupのリーダーが同一ゾーン内に分散して配置されていることを示します。CLUSTER:すべてのPartition Groupのリーダーがクラスタ内の各ノードに分散して配置されていることを示します。
例
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 affectedtbl1と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 affectedtblgroup2という名前のテーブルグループを作成し、その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 allowedtblgroup3という名前のテーブルグループを作成し、その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 allowedtblgroup4という名前のテーブルグループを作成し、その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