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つの新しいパーティションに分かれ、一方の新しいパーティション名はp1_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