テーブル作成後、業務上のニーズに応じて、パーティション方式、パーティションタイプ、およびパーティションキーを変更できます。
パーティション方式の変更
OceanBaseデータベースのMySQLモードでは、テーブルのパーティション方式を変更できます。パーティション方式の変換に対するサポート状況は以下の表のとおりです。
| パーティショニング方式 | パーティションなし | パーティション1 | パーティション2 |
|---|---|---|---|
| パーティションなし | - | サポート | サポート |
| パーティション1 | サポートなし | - | サポート |
| パーティション2 | サポートなし | サポート | - |
パーティションテーブルまたはコンポジット・パーティションテーブルをパーティションテーブルに変換する
パーティションテーブルまたはコンポジット・パーティションテーブルを任意のパーティションタイプのパーティションテーブルに変換できます。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;