OceanBaseデータベースは、パーティションテーブル内で手動にパーティションのスプリット操作を行うことをサポートしています。これは既存のパーティションを複数のパーティションに分割することです。この機能では、スプリット対象のパーティションと新しいパーティションの分割ポイントを指定して、手動でパーティションのスプリットコマンドを実行し、ニーズやデータ増加状況に応じてパーティションを調整できます。
手動パーティション分割操作のサポート状況
現在のバージョンでは、Rangeパーティションを持つパーティションテーブルに対してのみ、手動でのパーティション分割操作がサポートされています。
制限事項と注意点
- ListパーティションテーブルおよびHashパーティションテーブルへの手動分割はサポートされていません。
- サブパーティションテーブルへの手動分割はサポートされていません。
- 手動で分割されるテーブルのパーティションキーと主キーのプレフィックスが異なる場合はサポートされていません。
- 主キーを持たないテーブルに対する手動パーティション分割はサポートされていません。
- カラムストアテーブルに対する手動パーティション分割はサポートされていません。
- カラムストアレプリカに対する手動パーティション分割はサポートされていません。
- テーブルが属する
TABLEGROUP(テーブルグループ)に複数のテーブルが含まれている場合、手動パーティション分割はサポートされていません。このTABLEGROUPにこのテーブルのみが含まれている場合は、手動パーティション分割がサポートされます。 - マテリアライズドビューに対する手動パーティション分割はサポートされていません。
- グローバルインデックスの手動分割はサポートされていません。
- フルテキストインデックスの手動分割はサポートされていません。
- GISインデックスの手動分割はサポートされていません。
- ベクトルインデックスの手動分割はサポートされていません。
- ローカルインデックスやLOBテーブルのパーティションを個別に分割することはサポートされていません。
手動パーティション分割構文
ALTER TABLE table_name SPLIT PARTITION partition_name split_partition_option;
split_partition_option:
split_at_format
| split_into_format
split_at_format:
AT (value) [INTO (PARTITION [split_partition_name], PARTITION [split_partition_name])]
split_into_format:
INTO (PARTITION split_partition_name VALUES LESS THAN (value)
[, PARTITION split_partition_name VALUES LESS THAN (value) ...]
, PARTITION split_partition_name)
パラメータの説明
| パラメータ | 説明 |
|---|---|
| table_name | テーブル名を指定します。 |
| partition_name | 分割対象のパーティション名を指定します。 |
| split_at_format | この構文を使用してパーティション分割を行う場合、指定された value を境界としてソースパーティションを2つのパーティションに分割します。また、INTO 句を使用して分割後のパーティションに名前を設定することもできます。 |
| value | パーティション分割の境界値の範囲を指定します。 |
| split_partition_name | 新しく分割されるパーティションの名前を指定します。 |
| split_into_format | この構文を使用してパーティション分割を行う場合、1つのパーティションを複数のパーティションに分割できます。パーティション分割で定義される value の範囲は、ソースパーティションの value の範囲と同一である必要があり、かつ value は昇順で定義する必要があります(最後のパーティション分割の定義は不要であり、その value はソースパーティションと同じです)。 |
例
Rangeパーティションを持つパーティションテーブル test_tbl1 を作成します。
CREATE TABLE test_tbl1(col1 INT, col2 INT, PRIMARY KEY(col1))
PARTITION BY RANGE(col1)
(PARTITION p0 VALUES LESS THAN(100),
PARTITION p1 VALUES LESS THAN(200),
PARTITION p2 VALUES LESS THAN(300),
PARTITION p_max VALUES LESS THAN (MAXVALUE));
test_tbl1テーブルのパーティションp0を、50の値に対応する行で2つの新しいパーティションに分割します。分割後、元のパーティションp0は2つの新しいパーティションに分かれ、新しいパーティション名はシステムが割り当てます。ALTER TABLE test_tbl1 SPLIT PARTITION p0 AT (50);test_tbl1テーブルのパーティションp1を、150の値に対応する行で2つの新しいパーティションに分割します。分割後、元のパーティションp1は2つの新しいパーティションに分かれ、1つの新しいパーティション名はp1_1となり、もう1つの新しいパーティション名はシステムが割り当てます。ALTER TABLE test_tbl1 SPLIT PARTITION p1 AT (150) INTO ( PARTITION p1_1, PARTITION);test_tbl1テーブルのパーティションp2を、250の値に対応する行で2つの新しいパーティションに分割します。分割後、元のパーティションp2は2つの新しいパーティションp2_1とp2_2に分かれます。ALTER TABLE test_tbl1 SPLIT PARTITION p2 AT (250) INTO ( PARTITION p2_1, PARTITION p2_2);test_tbl1テーブルのパーティションp_maxを、400と500の2つの値に対応する行で3つの新しいパーティションに分割します。分割後、元のパーティションp_maxは3つの新しいパーティションp_max_1、p_max_2およびp_max_3に分かれます。ALTER TABLE test_tbl1 SPLIT PARTITION p_max INTO ( PARTITION p_max_1 VALUES LESS THAN (400), PARTITION p_max_2 VALUES LESS THAN (500), PARTITION p_max_3);テーブル
test_tbl1の構造と定義を確認します。SHOW CREATE TABLE test_tbl1;実行結果は次のとおりです:
+-----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | TABLE | CREATE TABLE | +-----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | TEST_TBL1 | CREATE TABLE "TEST_TBL1" ( "COL1" NUMBER(*,0), "COL2" NUMBER(*,0), PRIMARY KEY ("COL1") ) COMPRESS FOR ARCHIVE REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0 partition by range(col1) size ('128MB') (partition "P8195" values less than (50), partition "P8196" values less than (100), partition "P1_1" values less than (150), partition "P8197" values less than (200), partition "P2_1" values less than (250), partition "P2_2" values less than (300), partition "P_MAX_1" values less than (400), partition "P_MAX_2" values less than (500), partition "P_MAX_3" values less than (MAXVALUE)) | +-----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set