テーブル作成後、業務上のニーズに応じて、パーティション方式、パーティションタイプ、およびパーティションキーを変更できます。
パーティション方式の変更
OceanBaseデータベースのOracleモードでは、テーブルのパーティション方式を変更できます。パーティション方式の変換に対するサポート状況は以下の表のとおりです。
| パーティショニング方式 | パーティションなし | パーティション1 | パーティション2 |
|---|---|---|---|
| パーティションなし | - | サポート | サポート |
| パーティション1 | サポートなし | - | サポートなし |
| パーティション2 | サポートなし | サポートなし | - |
パーティションテーブル以外のテーブルをパーティションテーブルに変換する
ALTER TABLE ステートメントを使用して、パーティションテーブル以外のテーブルを任意のパーティションタイプのパーティションテーブルに変換できます。SQL構文は以下のとおりです:
ALTER TABLE table_name MODIFY PARTITION BY partition_option;
partition_option:
range_partition_option
| list_partition_option
| hash_partition_option
range_partition_option:
RANGE (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 (expr(column_name) | column_name)
(PARTITION partition_name VALUES ( v01 [, v0N])
[, PARTITION partition_name VALUES ( vN1 [, vNN]) ...]
[, PARTITION partition_name VALUES (DEFAULT)]
)
hash_partition_option:
HASH (expr(column_name) | column_name) PARTITIONS partition_count
パラメータの説明:
table_name:変更対象のパーティションテーブル以外のテーブル名。column_name:パーティションを指定する列の列名。partition_count:パーティション数。
テーブル構文の詳細なパラメータの説明については、ALTER TABLEを参照してください。
例:
パーティションテーブル以外のテーブル tbl1 を作成した後、Hashタイプのパーティションテーブルに変換します。
パーティションテーブル以外のテーブル
tbl1を作成します。obclient> CREATE TABLE tbl1(col1 INT, col2 DATE, PRIMARY KEY(col1, col2));パーティションテーブル以外のテーブル
tbl1をパーティションテーブルに変換します。obclient> ALTER TABLE tbl1 MODIFY PARTITION BY HASH(col1) PARTITIONS 4;
パーティションテーブル以外のテーブルをサブパーティションテーブルに変換する
パーティションテーブル以外のテーブルを、任意のパーティションタイプのテンプレート型または非テンプレート型のサブパーティションテーブルに変換できます。
パーティションテーブル以外のテーブルをテンプレート型サブパーティションテーブルに変換するSQL構文は以下のとおりです:
ALTER TABLE table_name MODIFY PARTITION BY partition_option;
partition_option:
RANGE(column_name) subpartition_option (range_partition_option)
| LIST(expr(column_name) | column_name) subpartition_option (list_partition_option)
| HASH(expr(column_name) | column_name) {(hash_partition_option)
| PARTITIONS partition_count}
subpartition_option:
SUBPARTITION BY
RANGE(column_name) SUBPARTITION TEMPLATE(range_subpartition_option)
| LIST(expr(column_name) | column_name) SUBPARTITION TEMPLATE(list_subpartition_option)
| HASH(expr(column_name) | column_name) {SUBPARTITION TEMPLATE (hash_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( v01 [, v0N])
[, PARTITION partition_name VALUES( vN1 [, vNN]) ...]
[, PARTITION partition_name VALUES(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 ...]
パーティションテーブル以外のテーブルを非テンプレート型サブパーティションテーブルに変換するSQL構文は以下のとおりです:
ALTER TABLE table_name MODIFY PARTITION BY partition_option;
partition_option:
RANGE(column_name) subpartition_option
{range_partition_option (subpartition_option_list)
[, range_partition_option (subpartition_option_list) ...]
}
| LIST(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) ...]
}
subpartition_option:
SUBPARTITION BY
RANGE(column_name)
| LIST(expr(column_name) | column_name)
| HASH(expr(column_name) | column_name)
range_partition_option:
PARTITION partition_name VALUES LESS THAN(expr)
list_partition_option:
PARTITION partition_name VALUES(expr)
hash_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(expr)
[, SUBPARTITION subpartition_name VALUES(expr) ...]
hash_subpartition_option:
SUBPARTITION subpartition_name
[, SUBPARTITION subpartition_name ...]
テーブル構文の詳細なパラメータについては、ALTER TABLEを参照してください。
例:
パーティションテーブル以外のテーブル tbl2 を作成した後、Hash + Rangeパーティションのテンプレート型サブパーティションテーブルに変換します。
パーティションテーブル以外のテーブル
tbl2を作成します。obclient> CREATE TABLE tbl2(col1 INT, col2 DATE, PRIMARY KEY(col1, col2));パーティションテーブル以外のテーブル
tbl2をHash+Rangeタイプのテンプレート型サブパーティションテーブルに変換します。obclient> ALTER TABLE tbl2 MODIFY PARTITION BY HASH(col1) SUBPARTITION BY RANGE(col2) SUBPARTITION TEMPLATE( SUBPARTITION p1 VALUES LESS THAN ('10-OCT-2016'), SUBPARTITION p2 VALUES LESS THAN ('30-MAR-2116') ) PARTITIONS 2;
パーティションタイプの変更
OceanBaseデータベースのOracleモードでは、パーティションテーブルのパーティションタイプを変更することは現在サポートされていません。
パーティションキーの変更
OceanBaseデータベースのOracleモードでは、パーティションテーブルのパーティションキーを変更することは現在サポートされていません。