OceanBaseデータベースでは、パーティションテーブルにおいてパーティションの分割・拡張操作を手動で行うことができます。これは、既存のパーティションを複数のパーティションに分割する操作です。この機能を利用すると、分割対象のパーティションと新しいパーティションの分割ポイントを指定して手動で分割コマンドを実行し、ニーズやデータの増加状況に応じてパーティションを調整できます。
手動でのパーティション分割・拡張のサポート状況
現在のバージョンでは、Range/Range Columnsパーティションを持つパーティションテーブルに対してのみ、手動でのパーティション分割・拡張操作をサポートしており、1つのパーティションを複数のパーティションに分割することのみが可能です。
使用上の制限と注意事項
- ListパーティションやHashパーティションテーブルの手動分割はサポートされていません。
- セカンダリパーティションテーブルの手動分割はサポートされていません。
- 手動で分割対象となるテーブルのパーティションキーと主キーのプレフィックスが異なる場合はサポートされていません。
- 主キーを持たないテーブルの手動パーティション分割はサポートされていません。
- カラムストアテーブルの手動パーティション分割はサポートされていません。
- カラムストアレプリカの手動パーティション分割はサポートされていません。
- テーブルが属する
TABLEGROUP(テーブルグループ)に複数のテーブルが含まれている場合、手動でのパーティション分割はサポートされていません。このTABLEGROUPにこのテーブルのみが含まれている場合は、手動でのパーティション分割をサポートします。 - マテリアライズドビューの手動パーティション分割はサポートされていません。
- グローバルインデックスの手動分割はサポートされていません。
- フルテキストインデックスの手動分割はサポートされていません。
- 空間インデックスの手動分割はサポートされていません。
- ベクトルインデックスの手動分割はサポートされていません。
- ローカルインデックスやLOBテーブルのパーティションを個別に分割することはサポートされていません。
手動でのパーティション分割・拡張の構文
ALTER TABLE table_name REORGANIZE PARTITION partition_name INTO (
PARTITION split_partition_name VALUES LESS THAN (value)
[, PARTITION split_partition_name VALUES LESS THAN (value) ...]
, PARTITION split_partition_name VALUES LESS THAN (source_value));
パラメータの説明
パラメータ |
説明 |
|---|---|
| table_name | テーブル名を指定します。 |
| partition_name | 分割対象のパーティション名を指定します。 |
| split_partition_name | 新しく分割されるパーティション名を指定します。 |
| value | パーティション分割の境界値を指定します(値の範囲)。
注意Rangeパーティションを手動で分割する場合、パーティション |
| source_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を、30と60の値に対応する行で分割して、3つの新しいパーティションを作成します。分割後、元のパーティションp0は、3つの新しいパーティションp0_1、p0_2、p0に分かれます。ALTER TABLE test_tbl1 REORGANIZE PARTITION p0 INTO ( PARTITION p0_1 VALUES LESS THAN (30), PARTITION p0_2 VALUES LESS THAN (60), PARTITION p0 VALUES LESS THAN (100));test_tbl1テーブルのパーティションp_maxを、400と500の値に対応する行で分割して、3つの新しいパーティションを作成します。分割後、元のパーティションp_maxは、3つの新しいパーティションp_max_1、p_max_2、p_max_3に分かれます。ALTER TABLE test_tbl1 REORGANIZE PARTITION p_max INTO ( PARTITION p_max_1 VALUES LESS THAN (400), PARTITION p_max_2 VALUES LESS THAN (500), PARTITION p_max_3 VALUES LESS THAN (MAXVALUE));テーブル
test_tbl1の構造と定義を確認します。SHOW CREATE TABLE test_tbl1;実行結果は次のとおりです:
+-----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | test_tbl1 | CREATE TABLE `test_tbl1` ( `col1` int(11) NOT NULL, `col2` int(11) DEFAULT NULL, PRIMARY KEY (`col1`) ) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0 partition by range(col1) size ('128MB') (partition `p0_1` values less than (30), partition `p0_2` values less than (60), partition `p0` values less than (100), partition `p1` values less than (200), partition `p2` 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