テーブルグループを作成した後、条件に合致するテーブルをそのテーブルグループに追加できます。
使用上の制限
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を2つ作成します。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';2つのパーティション定義が同じであるテンプレート型のサブパーティションテーブル
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