このトピックでは、リストパーティションまたは範囲パーティションテーブルのパーティションとサブパーティションを再編成し、データ損失なしで自動データ分散を有効にする方法について説明します。
例
パーティションの分割 | パーティションのマージ 範囲値が隣接しているパーティションをマージできます。 |
パーティションの変更 | |
構文
ALTER TABLE table_name
REORGANIZE PARTITION partition_names INTO (partition_definitions)
partition_definitions: {list_partition | range_partition}
subpartition_definition: {list_subpartition | range_subpartition | hash_subpartition | key_subpartition}パラメータ | 説明 |
table_name | テーブルの名前。 |
partition_names | マージまたは分割する既存のパーティション名のリスト(コンマ区切り)。 |
partition_definitions | 新しいパーティション定義のリスト(コンマ区切り)。 |
partition_name | 作成するパーティションの名前。 説明 パーティション名は、すべてのパーティションとサブパーティションで一意である必要があり、オブジェクト識別子の命名規則に従う必要があります。 |
subpartition_name | 作成するサブパーティションの名前。 説明 サブパーティション名は、すべてのパーティションとサブパーティションで一意である必要があり、オブジェクト識別子の命名規則に従う必要があります。 |
例
データの準備
-- 年別にパーティション化され、四半期別にハッシュサブパーティション化された販売テーブルを作成します
CREATE TABLE sales_data (
order_id INT AUTO_INCREMENT,
order_date DATE NOT NULL,
amount DECIMAL(10,2),
PRIMARY KEY (order_id, order_date) -- プライマリキーにはパーティションキーを含める必要があります
)
PARTITION BY RANGE (YEAR(order_date))
SUBPARTITION BY HASH( QUARTER(order_date) )
SUBPARTITIONS 4 ( -- 各親パーティションにはデフォルトで 4 つのサブパーティションがあります
PARTITION p2019_2020 VALUES LESS THAN (2021),
PARTITION p2021 VALUES LESS THAN (2022),
PARTITION p2022 VALUES LESS THAN (2023),
PARTITION p_future VALUES LESS THAN MAXVALUE
);
-- テストデータを挿入します
INSERT INTO sales_data (order_date, amount) VALUES
('2020-03-15', 100.00), -- p2019_2020
('2021-06-20', 200.00), -- p2021
('2022-09-10', 300.00), -- p2022
('2023-12-25', 400.00); -- p_futureパーティションの分割
p2019_2020 パーティションを p2019 パーティションと p2020 パーティションに分割します。
ALTER TABLE sales_data
REORGANIZE PARTITION p2019_2020 INTO (
PARTITION p2019 VALUES LESS THAN (2020) (
SUBPARTITION s2019_q1,
SUBPARTITION s2019_q2,
SUBPARTITION s2019_q3,
SUBPARTITION s2019_q4
),
PARTITION p2020 VALUES LESS THAN (2021) (
SUBPARTITION s2020_q1,
SUBPARTITION s2020_q2,
SUBPARTITION s2020_q3,
SUBPARTITION s2020_q4
)
);パーティションのマージ
p2021 パーティションと p2022 パーティションを 1 つの p2021_2022 パーティションにマージします。
ALTER TABLE sales_data
REORGANIZE PARTITION p2021, p2022 INTO (
PARTITION p2021_2022 VALUES LESS THAN (2023) (
SUBPARTITION s2021_2022_q1,
SUBPARTITION s2021_2022_q2,
SUBPARTITION s2021_2022_q3,
SUBPARTITION s2021_2022_q4
)
);パーティションの変更
4 つのパーティション p2019、p2020、p2021_2022、p_future を 3 つのパーティション p2019、p2020_2021、p2022_future に変更します。
ALTER TABLE sales_data
REORGANIZE PARTITION p2019, p2020, p2021_2022, p_future INTO (
PARTITION p2019 VALUES LESS THAN (2020) (
SUBPARTITION s2019_q1,
SUBPARTITION s2019_q2,
SUBPARTITION s2019_q3,
SUBPARTITION s2019_q4
),
PARTITION p2020_2021 VALUES LESS THAN (2022) (
SUBPARTITION s2020_2021_q1,
SUBPARTITION s2020_2021_q2,
SUBPARTITION s2020_2021_q3,
SUBPARTITION s2020_2021_q4
),
PARTITION p2022_future VALUES LESS THAN MAXVALUE (
SUBPARTITION s2022_future_1,
SUBPARTITION s2022_future_2,
SUBPARTITION s2022_future_3,
SUBPARTITION s2022_future_4
)
);