テーブル作成後は、業務ニーズに応じて、テーブルのパーティショニング方法、パーティションタイプ、およびパーティションキーを変更できます。
パーティション方式の変更
OceanBaseデータベースのMySQLモードでは、テーブルのパーティション方式を変更できます。パーティション方式の変換に対応している場合は以下の表のとおりです。
パーティショニング方式 |
非パーティション |
パーティション |
サブパーティション |
|---|---|---|---|
| 非パーティション | - | サポート | サポート |
| パーティション | 不可 | - | サポート |
| サブパーティション | 不可 | サポート | - |
非パーティションテーブルまたはサブパーティションテーブルをパーティションテーブルに変換する
非パーティションテーブルまたはサブパーティションテーブルを任意のパーティションタイプのパーティションテーブルに変換できます。SQL構文は以下のとおりです:
ALTER TABLE table_name PARTITION BY partition_option;
partition_option:
range_partition_option
| list_partition_option
| hash_partition_option
| key_partition_option
range_partition_option:
RANGE [COLUMNS](expr(column_name) | column_name)
(PARTITION partition_name VALUES LESS THAN(expr)
[, PARTITION partition_name VALUES LESS THAN (expr) ...]
[, PARTITION partition_name VALUES LESS THAN (MAXVALUE)])
list_partition_option:
LIST [COLUMNS](expr(column_name) | column_name)
(PARTITION partition_name VALUES IN( v01 [, v0N])
[, PARTITION partition_name VALUES IN( vN1 [, vNN]) ...]
[, PARTITION partition_name VALUES IN(DEFAULT)]
)
hash_partition_option:
HASH(expr(column_name) | column_name) PARTITIONS partition_count
key_partition_option:
KEY(expr(column_name) | column_name) PARTITIONS partition_count
パラメータ説明:
table_name:変更対象の非パーティションテーブルの名前。column_name:パーティションを作成する列の名前。partition_name:パーティション名。partition_count:パーティション数。
テーブル変更構文の詳細なパラメータ説明については、ALTER TABLEを参照してください。
例:
非パーティションテーブル
tbl1を作成した後、Hashタイプのパーティションテーブルに変換します。非パーティションテーブル
tbl1を作成します。obclient> CREATE TABLE tbl1(col1 INT, col2 DATETIME);非パーティションテーブルをパーティションテーブルに変換します。
obclient> ALTER TABLE tbl1 PARTITION BY HASH(col1) PARTITIONS 4;
Hash + Range Columns パーティションのテンプレートサブパーティションテーブル
tbl1_hrcを作成した後、Hash パーティションのパーティションテーブルに変更します。Hash + Range Columns パーティションのサブパーティションテーブル
tbl1_hrcを作成します。obclient> CREATE TABLE tbl1_hrc (col1 INT, col2 DATETIME, PRIMARY KEY(col1, col2)) PARTITION BY HASH(col1) SUBPARTITION BY RANGE COLUMNS(col2) SUBPARTITION TEMPLATE( SUBPARTITION p1 VALUES LESS THAN ('2016-10-01'), SUBPARTITION p2 VALUES LESS THAN ('2026-10-01') ) PARTITIONS 2;サブパーティションテーブルをパーティションテーブルに変更します。
obclient> ALTER TABLE tbl1_hrc PARTITION BY HASH(col1) PARTITIONS 4;
非パーティションテーブルまたはパーティションテーブルをサブパーティションテーブルに変換する
非パーティションテーブルまたはパーティションテーブルを、任意のパーティションタイプのテンプレート型または非テンプレート型サブパーティションテーブルに変換できます。
非パーティションテーブルまたはパーティションテーブルをテンプレート型サブパーティションテーブルに変換するSQL構文は以下のとおりです:
ALTER TABLE table_name PARTITION BY partition_option;
partition_option:
RANGE [COLUMNS](expr(column_name) | column_name) subpartition_option (range_partition_option)
| LIST [COLUMNS](expr(column_name) | column_name) subpartition_option (list_partition_option)
| HASH(expr(column_name) | column_name) {(hash_partition_option)
| PARTITIONS partition_count}
| KEY(expr(column_name) | column_name){(key_partition_option)
| PARTITIONS partition_count}
subpartition_option:
SUBPARTITION BY
RANGE [COLUMNS](expr(column_name) | column_name) SUBPARTITION TEMPLATE(range_subpartition_option)
| LIST [COLUMNS](expr(column_name) | column_name) SUBPARTITION TEMPLATE(list_subpartition_option)
| HASH(expr(column_name) | column_name) {SUBPARTITION TEMPLATE (hash_subpartition_option)
| SUBPARTITIONS subpartition_count}
| KEY(expr(column_name) | column_name) {SUBPARTITION TEMPLATE (key_subpartition_option)
| SUBPARTITIONS subpartition_count}
range_partition_option:
PARTITION partition_name VALUES LESS THAN(expr)
[, PARTITION partition_name VALUES LESS THAN(expr) ...]
[, PARTITION partition_name VALUES LESS THAN(MAXVALUE)]
range_subpartition_option:
SUBPARTITION subpartition_name VALUES LESS THAN(expr)
[, SUBPARTITION subpartition_name VALUES LESS THAN(expr) ...]
[, SUBPARTITION subpartition_name VALUES LESS THAN(MAXVALUE)]
list_partition_option:
PARTITION partition_name VALUES IN( v01 [, v0N])
[,PARTITION partition_name VALUES IN( vN1 [, vNN]) ...]
[,PARTITION partition_name VALUES IN(DEFAULT)]
list_subpartition_option:
SUBPARTITION subpartition_name VALUES(expr)
[, SUBPARTITION subpartition_name VALUES(expr) ...]
hash_partition_option:
PARTITION partition_name
[, PARTITION partition_name ...]
hash_subpartition_option:
SUBPARTITION subpartition_name
[, SUBPARTITION subpartition_name ...]
key_partition_option:
PARTITION partition_name
[, PARTITION partition_name ...]
key_subpartition_option:
SUBPARTITION subpartition_name
[, SUBPARTITION subpartition_name ...]
非パーティションテーブルまたはパーティションテーブルを非テンプレート型サブパーティションテーブルに変換するSQL構文は以下のとおりです:
ALTER TABLE table_name PARTITION BY partition_option;
partition_option:
RANGE [COLUMNS](expr(column_name) | column_name) subpartition_option
{range_partition_option (subpartition_option_list)
[, range_partition_option (subpartition_option_list) ...]
}
| LIST [COLUMNS](expr(column_name) | column_name) subpartition_option
{list_partition_option (subpartition_option_list)
[, list_partition_option (subpartition_option_list) ...]
}
| HASH(expr(column_name) | column_name) subpartition_option
{hash_partition_option (subpartition_option_list)
[, hash_partition_option (subpartition_option_list) ...]
}
| KEY(expr(column_name) | column_name) subpartition_option
{key_partition_option (subpartition_option_list)
[, key_partition_option (subpartition_option_list) ...]
}
subpartition_option:
SUBPARTITION BY
RANGE [COLUMNS](expr(column_name) | column_name)
| LIST [COLUMNS](expr(column_name) | column_name)
| HASH(expr(column_name) | column_name)
| KEY(expr(column_name) | column_name)
range_partition_option:
PARTITION partition_name VALUES LESS THAN(expr)
list_partition_option:
PARTITION partition_name VALUES IN(expr)
hash_partition_option:
PARTITION partition_name
key_partition_option:
PARTITION partition_name
subpartition_option_list:
range_subpartition_option
| list_subpartition_option
| hash_subpartition_option
range_subpartition_option:
SUBPARTITION subpartition_name VALUES LESS THAN(expr)
[, SUBPARTITION subpartition_name VALUES LESS THAN(expr) ...]
list_subpartition_option:
SUBPARTITION subpartition_name VALUES IN(expr)
[, SUBPARTITION subpartition_name VALUES IN(expr) ...]
hash_subpartition_option:
SUBPARTITION subpartition_name
[, SUBPARTITION subpartition_name ...]
key_subpartition_option:
SUBPARTITION subpartition_name
[, SUBPARTITION subpartition_name ...]
パラメータ説明:
table_name:変更対象の非パーティションテーブルの名前。column_name:パーティションを作成する列の名前。partition_name:パーティション名。partition_count:パーティション数。subpartition_name:サブパーティション名。subpartition_count:サブパーティション数。
テーブル構文を変更する詳細なパラメータ説明については、ALTER TABLEを参照してください。
例:
非パーティションテーブル
tbl2を作成した後、Hash + Range Columns パーティションのテンプレート型サブパーティションテーブルに変換します。非パーティションテーブル
tbl2を作成します。obclient> CREATE TABLE tbl2(col1 INT, col2 DATETIME);非パーティションテーブル
tbl2をテンプレート型サブパーティションテーブルに変換します。obclient> ALTER TABLE tbl2 PARTITION BY HASH(col1) SUBPARTITION BY RANGE COLUMNS(col2) SUBPARTITION TEMPLATE( SUBPARTITION p1 VALUES LESS THAN('2016-10-01'), SUBPARTITION p2 VALUES LESS THAN('2026-10-01') ) PARTITIONS 2;
Hashタイプのパーティションテーブル
tbl2を作成した後、Hash + Range Columnsタイプのテンプレート型サブパーティションテーブルに変更します。パーティションテーブル
tbl2_hを作成します。obclient> CREATE TABLE tbl2_h(col1 INT, col2 DATETIME, PRIMARY KEY(col1, col2)) PARTITION BY HASH(col1) PARTITIONS 4;パーティションテーブル
tbl2_hをテンプレート型サブパーティションテーブルに変更します。obclient> ALTER TABLE tbl2_h PARTITION BY HASH(col1) SUBPARTITION BY RANGE COLUMNS(col2) SUBPARTITION TEMPLATE( SUBPARTITION p1 VALUES LESS THAN('2016-10-10'), SUBPARTITION p2 VALUES LESS THAN('2116-3-30') ) PARTITIONS 2;
パーティションタイプの変更
OceanBaseデータベースのMySQLモードでは、パーティションテーブルのパーティションタイプを変更できます。作成済みのパーティションテーブルのパーティションタイプを他の任意のパーティションタイプに変更できます。
パーティションタイプの変更
現在のパーティションテーブルのパーティションタイプを他の任意のタイプに変更できます。
例:
HashパーティションのパーティションテーブルをKeyパーティションのパーティションテーブルに変更します。
パーティションテーブル
tbl3_hを作成します。obclient> CREATE TABLE tbl3_h(col1 INT, col2 DATETIME, PRIMARY KEY(col1, col2)) PARTITION BY HASH(col1) PARTITIONS 4;パーティションテーブル
tbl3_hのパーティションタイプをKeyパーティションに変更します。obclient> ALTER TABLE tbl3_h PARTITION BY KEY(col1) PARTITIONS 10;
RangeパーティションのパーティションテーブルをListパーティションのパーティションテーブルに変更します。
パーティションテーブル
tbl3_rを作成します。obclient> CREATE TABLE tbl3_r(col1 INT, col2 INT) PARTITION BY RANGE(col1) (PARTITION p0 VALUES LESS THAN(100), PARTITION p1 VALUES LESS THAN(200), PARTITION p2 VALUES LESS THAN(300) );パーティションテーブル
tbl3_rのパーティションタイプをListパーティションに変更します。obclient> ALTER TABLE tbl3_r PARTITION BY LIST(col1) (PARTITION p0 VALUES IN (1, 2, 3), PARTITION p1 VALUES IN (5, 6), PARTITION p2 VALUES IN (DEFAULT) );
セカンダリパーティションテーブルのパーティションタイプを変更する
現在のパーティションテーブルのパーティションタイプを他の任意のタイプに変更できます。
例:
Range Columns + Range Columns パーティションのテンプレート型セカンダリパーティションテーブルを List Columns + Key パーティションのテンプレート型セカンダリパーティションテーブルに変更します。
Range Columns + Range Columns パーティションのテンプレート型セカンダリパーティションテーブルを作成します。
obclient> CREATE TABLE tbl4_rcrc(col1 INT, col2 INT) PARTITION BY RANGE COLUMNS(col1) SUBPARTITION BY RANGE COLUMNS(col2) SUBPARTITION TEMPLATE (SUBPARTITION mp0 VALUES LESS THAN(1000), SUBPARTITION mp1 VALUES LESS THAN(2000), SUBPARTITION mp2 VALUES LESS THAN(3000) ) (PARTITION p0 VALUES LESS THAN(100), PARTITION p1 VALUES LESS THAN(200), PARTITION p2 VALUES LESS THAN(300) );パーティションテーブルのパーティションタイプを List Columns + Key パーティションに変更します。
obclient> ALTER TABLE tbl4_rcrc PARTITION BY LIST COLUMNS(col1) SUBPARTITION BY KEY(col2) SUBPARTITIONS 3 (PARTITION p0 VALUES IN(100), PARTITION p1 VALUES IN(200), PARTITION p2 VALUES IN(300) );
パーティションキーの変更
ビジネスニーズに応じてパーティションキーを変更できます。SQL構文は以下のとおりです:
ALTER TABLE table_name PARTITION BY partition_option;
例:
テーブル
tbl5_hを作成し、パーティションキーをcol1に設定します。obclient> CREATE TABLE tbl5_h(col1 INT, col2 INT, PRIMARY KEY(col1, col2)) PARTITION BY HASH(col1) PARTITIONS 4;パーティションテーブル
tbl5_hのパーティションキーをcol2に変更します。obclient> ALTER TABLE tbl5_h PARTITION BY HASH(col2) PARTITIONS 6;