テーブルグループを作成した後、条件に合致するテーブルをテーブルグループに追加できます。
制限事項
OceanBaseデータベースのアップグレード中は、ALTER TABLEGROUP ステートメントを使用してテーブルグループにテーブルを追加することは禁止されています。
前提条件
テーブルをテーブルグループに追加する前に、テーブルグループのプロパティおよびテーブルグループ内のテーブルのパーティション情報を確認し、現在のテーブルがテーブルグループへの追加条件を満たしているかどうかを確認する必要があります。テーブルグループ情報の詳細な操作については、テーブルグループ情報の表示を参照してください。
所属するテーブルグループを指定する場合、作成予定のテーブルはそのテーブルグループへの追加条件を満たしている必要があります。
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';2つのパーティション定義が同一のパーティションテーブル
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';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