全部产品
Search
文档中心

PolarDB:REORGANIZE PARTITION

更新时间:Jul 02, 2025

Topik ini menjelaskan cara merestrukturisasi partisi dalam tabel terpartisi daftar atau tabel terpartisi rentang menggunakan klausa REORGANIZE PARTITION dalam pernyataan ALTER TABLE. Sistem secara otomatis mendistribusikan ulang data untuk mencocokkan definisi partisi baru berdasarkan klausa tersebut. Tidak ada data yang hilang selama proses restrukturisasi.

Contoh

Membagi partisi

-- Bagi partisi p2019_2020 yang ada menjadi dua partisi baru 2019 dan 2020.
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
    )
);

Menggabungkan partisi

-- Gabungkan partisi p2021 dan p2022.
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
    )
);
Anda hanya dapat menggabungkan partisi yang memiliki nilai rentang berurutan.

Modifikasi partisi

-- Reorganisasi partisi yang ada menjadi empat partisi baru berdasarkan rentang kuartal.
ALTER TABLE logs
REORGANIZE PARTITION p0, p1 INTO (
    PARTITION q1 VALUES LESS THAN (TO_DAYS('2023-04-01')),
    PARTITION q2 VALUES LESS THAN (TO_DAYS('2023-07-01')),
    PARTITION q3 VALUES LESS THAN (TO_DAYS('2023-10-01')),
    PARTITION q4 VALUES LESS THAN (TO_DAYS('2024-01-01'))
);

Sintaksis

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}

partition_definitions

  • Tentukan partisi daftar.

    PARTITION partition_name VALUES IN (value[, value]...) 
    (subpartition, ...)
  • Tentukan partisi rentang.

    PARTITION partition_name VALUES LESS THAN (value[, value]...) 
    (subpartition, ...)

subpartition_definitions

  • Tentukan subpartisi daftar.

    SUBPARTITION [subpartition_name] VALUES IN (value[, value]...) 
    [TABLESPACE tablespace_name]
  • Tentukan subpartisi rentang.

    SUBPARTITION [subpartition_name] VALUES LESS THAN (value[, value]...) 
    [TABLESPACE tablespace_name]
  • Tentukan subpartisi hash atau key.

    SUBPARTITION [subpartition_name ]
    [TABLESPACE tablespace_name]

Parameter

Deskripsi

table_name

Nama tabel.

partition_names

Daftar nama partisi yang dipisahkan koma yang ingin Anda gabungkan atau bagi.

partition_definitions

Daftar definisi partisi baru yang dipisahkan koma.

partition_name

Nama partisi yang ingin Anda buat.

Catatan

Nama partisi harus unik di antara semua partisi dan subpartisi, serta harus mengikuti konvensi penamaan untuk pengenal objek.

subpartition_name

Nama subpartisi yang ingin Anda buat.

Catatan

Nama subpartisi harus unik di antara semua partisi dan subpartisi, serta harus mengikuti konvensi penamaan untuk pengenal objek.

Contoh

Persiapkan data

-- Buat tabel penjualan yang terpartisi rentang berdasarkan tahun dan lebih lanjut ter-subpartisi hash berdasarkan kuartal. 
CREATE TABLE sales_data (
    order_id INT AUTO_INCREMENT,
    order_date DATE NOT NULL,
    amount DECIMAL(10,2),
    PRIMARY KEY (order_id, order_date)  -- Kunci utama harus mencakup kunci partisi.
)
PARTITION BY RANGE (YEAR(order_date))
SUBPARTITION BY HASH( QUARTER(order_date) )
SUBPARTITIONS 4 (  -- Secara default, setiap partisi induk memiliki empat subpartisi.
    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
);

-- Masukkan data uji.
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

Membagi partisi

Pisahkan partisi p2019_2020 menjadi partisi p2019 dan 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
    )
);

Menggabungkan partisi

Gabungkan partisi p2021 dan p2022 menjadi satu partisi 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
    )
);

Modifikasi partisi

Ubah empat partisi p2019, p2020, p2021_2022, dan p_future menjadi tiga partisi p2019, p2020_2021, dan 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
    )
);