OceanBaseデータベースでは、パーティションテーブルに対してパーティションの分割・拡張操作を手動で実行できます。これにより、既存のパーティションを複数のパーティションに分割することが可能です。この機能を利用すると、分割対象のパーティションと新しいパーティションの分割ポイントを指定して手動で分割コマンドを実行し、ニーズやデータの増加状況に応じてパーティションを調整できます。
手動でのパーティションの分割・拡張のサポート状況
現在のバージョンでは、Rangeパーティションを持つパーティションテーブルに対してのみ、手動でのパーティションの分割・拡張操作をサポートしています。
使用上の制限と注意事項
- ListパーティションやHashパーティションのテーブルは、手動での分割・拡張をサポートしていません。
- セカンダリパーティションテーブルは、手動での分割・拡張をサポートしていません。
- 手動で分割・拡張する対象のテーブルのパーティションキーと主キーのプレフィックスが異なる場合は、サポートされていません。
- 主キーを持たないテーブルの手動でのパーティションの分割・拡張はサポートされていません。
- カラムストアテーブルの手動でのパーティションの分割・拡張はサポートされていません。
- カラムストアレプリカの手動でのパーティションの分割・拡張はサポートされていません。
- テーブルが属する
TABLEGROUP(テーブルグループ)に複数のテーブルが含まれている場合、手動でのパーティションの分割・拡張はサポートされていません。このTABLEGROUPにこのテーブルのみが含まれている場合は、サポートされます。 - マテリアライズドビューの手動でのパーティションの分割・拡張はサポートされていません。
- グローバルインデックスの手動での分割・拡張はサポートされていません。
- フルテキストインデックスの手動での分割・拡張はサポートされていません。
- 空間インデックスの手動での分割・拡張はサポートされていません。
- ベクトルインデックスの手動での分割・拡張はサポートされていません。
- ローカルインデックスや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の値に対応する行を分割点として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