テーブルグループを作成した後、条件に合致するテーブルをそのテーブルグループに追加できます。
使用上の制限
OceanBaseデータベースのアップグレード中は、ALTER TABLEGROUP ステートメントを使用してテーブルグループにテーブルを追加することは禁止されています。
注意事項
パーティション重みを持つテーブルはテーブルグループに追加できますが、追加後はテーブルグループ全体の分散に影響を与える可能性があります。パーティション重みを持つテーブルをテーブルグループに追加した場合の元のテーブルグループへの具体的な影響は、次の表のとおりです。
テーブルグループのSHARDINGプロパティ |
元のパーティション配置 |
パーティション重み付け後の影響 |
|---|---|---|
| NONE | 全部が集約される | 影響なし |
| PARTITION | 各テーブルのパーティション単位でValueが同じパーティションを集約(同一パーティショングループ)、パーティション単位で分散する。 | 重み付けされた少数のパーティションがテーブルグループ全体の分布に影響を与える。 |
| ADAPTIVE |
|
テーブルグループ内のすべてがパーティションテーブルの場合、重み付けされた少数のパーティションがテーブルグループ全体の分布に影響を与える。現在、サブパーティションテーブルに対するパーティション重み付けはサポートされていないため、テーブルグループ内のすべてがサブパーティションテーブルの場合は該当しない。 |
説明
テーブルグループにグループ重みが設定されている場合、そのテーブルグループ内のテーブルレベルおよびパーティションレベルの重みは無効になります。テーブルグループ重みの追加方法については、SET_TABLEGROUP_BALANCE_WEIGHTを参照してください。
前提条件
テーブルをテーブルグループに追加する前に、テーブルグループの属性およびテーブルグループ内のテーブルのパーティション情報を確認し、現在のテーブルがテーブルグループへの追加条件を満たしているかどうかを確認する必要があります。テーブルグループ情報の詳細な操作については、テーブルグループ情報の確認を参照してください。
所属するテーブルグループを指定する場合、作成予定のテーブルはそのテーブルグループへの追加条件を満たしている必要があります。
SHARDING属性がNONEのテーブルグループでは、作成予定のテーブルに制限はありません。テーブルグループ内には、非パーティションテーブル、パーティションテーブル、サブパーティションテーブルを同時に含めることができます。説明
SHARDING = 'NONE'属性のテーブルグループにテーブルを追加する場合、そのテーブルにグローバルインデックスがある場合、システムはパフォーマンス向上のため、自動的にグローバルインデックスをそのテーブルグループにバインドします。グローバルインデックスの詳細については、グローバルインデックスを参照してください。SHARDING属性がPARTITIONのテーブルグループでは、作成予定のテーブルの対応するパーティションは、テーブルグループ内のすべてのテーブルのパーティションと、パーティションタイプ、パーティション数、パーティション値を含むパーティション定義が一致している必要があります。テーブルグループ内には、パーティションテーブルとサブパーティションテーブルを同時に含めることができます。また、テーブルグループ内のすべてが非パーティションテーブルであっても構いません。同一のパーティション定義とは具体的には以下を指します:
- パーティションタイプが同じであること。例えば、どちらもRangeパーティションであること。
- Hashパーティションの場合、参照する列数が同じで、パーティション数が同じであること。
- Rangeパーティションの場合、参照する列数が同じで、パーティション数が同じで、Range分割点も同じであること。
SHARDING属性がADAPTIVEのテーブルグループでは、作成予定のテーブルの対応するパーティションとサブパーティションは、テーブルグループ内のすべてのテーブルのパーティションとサブパーティションのパーティション定義と一致している必要があります。これには、パーティションタイプ、パーティション数、パーティション値が含まれます。テーブルグループ内は、すべてパーティションテーブルまたはすべてサブパーティションテーブルである必要があります。また、テーブルグループ内のすべてが非パーティションテーブルであっても構いません。同一のパーティション定義とは具体的には以下を指します:
- パーティションタイプが同じであること(例えば、どちらもHash + Rangeパーティションであること)。
- Hashパーティションの場合、参照する列数が同じで、パーティション数が同じであること。
- Rangeパーティションの場合、参照する列数が同じで、パーティション数が同じで、Range分割点も同じであること。
- サブパーティションの場合、そのパーティションタイプに応じて、パーティションと同じ要件が適用されます。
テーブル作成時にテーブルをテーブルグループに割り当てる
テーブルグループを作成した後、まだテーブルが作成されていない場合は、テーブル作成時にテーブルグループを指定することで、そのテーブルをテーブルグループに割り当てることができます。ステートメントは以下のとおりです。
CREATE TABLE table_name column_definition TABLEGROUP = tablegroup_name [partition_option];
ステートメントの使用方法:
このステートメントを実行するには、現在のユーザーがテーブルに対する
ALTER権限を持っている必要があります。column_definition:テーブルの列名とデータ型を定義します。TABLEGROUP:テーブルが属するテーブルグループを指定します。partition_option:テーブルのパーティション情報を定義します。
テーブルを作成してテーブルグループに追加する例を以下に示します:
SHARDINGプロパティがNONEのテーブルグループにテーブルを追加します。SHARDINGプロパティがNONEのテーブルグループtblgroup1を作成します。CREATE TABLEGROUP tblgroup1 SHARDING = 'NONE';非パーティションテーブル
tbl1を作成し、テーブルグループtblgroup1に追加します。CREATE TABLE tbl1 (col int) TABLEGROUP = tblgroup1;パーティションテーブル
tbl2を作成し、テーブルグループtblgroup1に追加します。CREATE TABLE tbl2 (col1 BIGINT PRIMARY KEY,col2 VARCHAR(50)) TABLEGROUP = tblgroup1 PARTITION BY LIST(col1) ( PARTITION p0 VALUES IN (1, 2, 3), PARTITION p1 VALUES IN (5, 6), PARTITION p2 VALUES IN (DEFAULT) );テーブルグループ内のテーブルを確認します。
SELECT * FROM oceanbase.DBA_OB_TABLEGROUP_TABLES WHERE tablegroup_name = 'tblgroup1';結果は次のとおりです:
+-----------------+-------+------------+----------+ | TABLEGROUP_NAME | OWNER | TABLE_NAME | SHARDING | +-----------------+-------+------------+----------+ | tblgroup1 | test | tbl1 | NONE | | tblgroup1 | test | tbl2 | NONE | +-----------------+-------+------------+----------+ 2 rows in set
SHARDINGプロパティがPARTITIONのテーブルグループにテーブルを追加します。SHARDINGプロパティがPARTITIONのテーブルグループtblgroup2を作成します。CREATE TABLEGROUP tblgroup2 SHARDING = 'PARTITION';パーティションテーブル
tbl3を作成し、テーブルグループtblgroup2に追加します。CREATE TABLE tbl3 (col1 BIGINT PRIMARY KEY,col2 VARCHAR(50)) TABLEGROUP = tblgroup2 PARTITION BY LIST(col1) (PARTITION p0 VALUES IN (1, 2, 3), PARTITION p1 VALUES IN (5, 6), PARTITION p2 VALUES IN (DEFAULT) );テーブル
tbl3とパーティションタイプ、パーティション数、パーティション値がすべて同じテーブルtbl4を作成し、テーブルグループtblgroup2に追加します。CREATE TABLE tbl4 (col1 BIGINT PRIMARY KEY,col2 VARCHAR(50)) TABLEGROUP = tblgroup2 PARTITION BY LIST(col1) (PARTITION p0 VALUES IN (1, 2, 3), PARTITION p1 VALUES IN (5, 6), PARTITION p2 VALUES IN (DEFAULT) );テーブルグループ内のテーブルを確認します。
SELECT * FROM oceanbase.DBA_OB_TABLEGROUP_TABLES WHERE tablegroup_name = 'tblgroup2';結果は次のとおりです:
+-----------------+-------+------------+-----------+ | TABLEGROUP_NAME | OWNER | TABLE_NAME | SHARDING | +-----------------+-------+------------+-----------+ | tblgroup2 | test | tbl3 | PARTITION | | tblgroup2 | test | tbl4 | PARTITION | +-----------------+-------+------------+-----------+ 2 rows in set
SHARDINGプロパティがADAPTIVEのテーブルグループにテーブルを追加します。SHARDINGプロパティがADAPTIVEのテーブルグループtblgroup3を作成します。CREATE TABLEGROUP tblgroup3 SHARDING = 'ADAPTIVE';セカンダリパーティションテーブル
tbl5を作成し、テーブルグループtblgroup3に追加します。CREATE TABLE tbl5(col1 INT,col2 varchar(50)) TABLEGROUP = tblgroup3 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')) );テーブル
tbl5とパーティションタイプ、パーティション数、パーティション値がすべて同じテーブルtbl6を作成し、テーブルグループtblgroup3に追加します。CREATE TABLE tbl6(col1 INT,col2 varchar(50)) TABLEGROUP = tblgroup3 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')) );テーブルグループ内のテーブルを確認します。
SELECT * FROM oceanbase.DBA_OB_TABLEGROUP_TABLES WHERE tablegroup_name = 'tblgroup3';結果は次のとおりです:
+-----------------+-------+------------+----------+ | TABLEGROUP_NAME | OWNER | TABLE_NAME | SHARDING | +-----------------+-------+------------+----------+ | tblgroup3 | test | tbl5 | ADAPTIVE | | tblgroup3 | test | tbl6 | ADAPTIVE | +-----------------+-------+------------+----------+ 2 rows in set
既存のテーブルをテーブルグループに追加する
テーブルグループを作成した後、テーブルが既に存在し、かつテーブルグループへの追加条件を満たしている場合は、ALTER TABLEGROUP ステートメントを使用してそのテーブルをテーブルグループに追加できます。ステートメントは以下のとおりです。
ALTER TABLEGROUP tablegroup_name ADD [TABLE] table_name [, table_name...];
ステートメントの使用方法:
このステートメントを実行するには、現在のユーザーがグローバルな
ALTER権限を持っていることを確認する必要があります。tablegroup_name:追加するテーブルのテーブルグループ。table_name:追加するテーブル。複数のテーブルを同時に追加する場合は、異なるテーブル名を半角カンマ(,)で区切ります。複数のテーブルを追加する場合、テーブル名の重複は許可されます。追加しようとするテーブルが既に現在のテーブルグループに存在する場合、システムはエラーを報告しません。
既存のテーブルをテーブルグループに追加する例:
既存のテーブルを
SHARDINGプロパティがNONEのテーブルグループに追加します。SHARDINGプロパティがNONEのテーブルグループtblgroup4を作成します。CREATE TABLEGROUP tblgroup4 SHARDING = 'NONE';非パーティションテーブル
tbl7とパーティションテーブルtbl8を作成します。CREATE TABLE tbl7 (col int);CREATE TABLE tbl8 (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) );テーブル
tbl7とtbl8を同時にテーブルグループtblgroup4に追加します。ALTER TABLEGROUP tblgroup4 ADD tbl7,tbl8;テーブルグループ内のテーブルを確認します。
SELECT * FROM oceanbase.DBA_OB_TABLEGROUP_TABLES WHERE tablegroup_name = 'tblgroup4';結果は次のとおりです:
+-----------------+-------+------------+----------+ | TABLEGROUP_NAME | OWNER | TABLE_NAME | SHARDING | +-----------------+-------+------------+----------+ | tblgroup4 | test | tbl7 | NONE | | tblgroup4 | test | tbl8 | NONE | +-----------------+-------+------------+----------+ 2 rows in set
既存のテーブルを
SHARDINGプロパティがPARTITIONのテーブルグループに追加します。SHARDINGプロパティがPARTITIONのテーブルグループtblgroup5を作成します。CREATE TABLEGROUP tblgroup5 SHARDING = 'PARTITION';パーティション定義が同じパーティションテーブル
tbl9とtbl10を作成します。CREATE TABLE tbl9 (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) );CREATE TABLE tbl10 (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) );テーブル
tbl9とtbl10を同時にテーブルグループtblgroup5に追加します。ALTER TABLEGROUP tblgroup5 ADD tbl9,tbl10;テーブルグループ内のテーブルを確認します。
SELECT * FROM oceanbase.DBA_OB_TABLEGROUP_TABLES WHERE tablegroup_name = 'tblgroup5';結果は次のとおりです:
+-----------------+-------+------------+-----------+ | TABLEGROUP_NAME | OWNER | TABLE_NAME | SHARDING | +-----------------+-------+------------+-----------+ | tblgroup5 | test | tbl9 | PARTITION | | tblgroup5 | test | tbl10 | PARTITION | +-----------------+-------+------------+-----------+ 2 rows in set
既存のテーブルを
SHARDINGプロパティがADAPTIVEのテーブルグループに追加します。SHARDINGプロパティがADAPTIVEのテーブルグループtblgroup6を作成します。CREATE TABLEGROUP tblgroup6 SHARDING = 'ADAPTIVE';パーティション定義が同じテンプレート型サブパーティションテーブル
tbl11とtbl12を作成します。CREATE TABLE tbl11(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));CREATE TABLE tbl12(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));テーブル
tbl11とtbl12を同時にテーブルグループtblgroup6に追加します。ALTER TABLEGROUP tblgroup6 ADD tbl11,tbl12;テーブルグループ内のテーブルを確認します。
SELECT * FROM oceanbase.DBA_OB_TABLEGROUP_TABLES WHERE tablegroup_name = 'tblgroup6';結果は次のとおりです:
+-----------------+-------+------------+----------+ | TABLEGROUP_NAME | OWNER | TABLE_NAME | SHARDING | +-----------------+-------+------------+----------+ | tblgroup6 | test | tbl11 | ADAPTIVE | | tblgroup6 | test | tbl12 | ADAPTIVE | +-----------------+-------+------------+----------+ 2 rows in set