Anda dapat mengeksekusi pernyataan ALTER TABLE untuk memodifikasi atribut partisi, sehingga beralih antara tabel partisi interval range, tabel biasa, atau tabel partisi rentang.
Prasyarat
Versi kluster harus PolarDB for MySQL 8.0 dengan versi revisi kluster minimal 8.0.2.2.0 atau lebih baru. Untuk informasi tentang cara melihat versi kluster Anda, lihat Kueri Versi Mesin.
Aturan penggantian
Perhatikan aturan penggantian berikut:
- Tabel biasa dapat diganti menjadi tabel partisi interval range, namun tabel partisi interval range tidak dapat dikembalikan menjadi tabel biasa. Gunakan pernyataan
ALTER TABLE nama_tabel opsi_partisiuntuk mengganti tabel biasa menjadi tabel partisi interval range. - Anda dapat beralih antara tabel partisi interval range dan tabel partisi rentang dengan cara berikut: Di PolarDB for MySQL 8.0.2.2.0 dan yang lebih baru, eksekusi pernyataan
ALTER TABLE nama_tabel opsi_partisi. Di PolarDB for MySQL 8.0.2.2.1 dan yang lebih baru, gunakan pernyataanALTER TABLE nama_tabel SET { INTERVAL(tipe, ekspresi) | INTERVAL(ekspresi) }.
Sintaksis
- Sintaksis 1
ALTER TABLE nama_tabel opsi_partisi;opsi_partisiadalah:PARTITION BY { RANGE{(ekspresi) | COLUMNS(daftar_kolom)} } { INTERVAL(tipe, ekspresi) | INTERVAL(ekspresi) } [(definisi_partisi [, definisi_partisi] ...)]definisi_partisiadalah:PARTITION nama_partisi [VALUES LESS THAN {ekspresi | MAXVALUE}] [[STORAGE] ENGINE [=] nama_mesin] [COMMENT [=] 'string' ] [DATA DIRECTORY [=] 'direktori_data'] [INDEX DIRECTORY [=] 'direktori_indeks'] [MAX_ROWS [=] jumlah_baris_maksimum] [MIN_ROWS [=] jumlah_baris_minimum] [TABLESPACE [=] nama_tablespace] - Sintaksis 2
ALTER TABLE nama_tabel SET { INTERVAL(tipe, ekspresi) | INTERVAL(ekspresi) };
Parameter
| Parameter | Deskripsi |
| nama_tabel | Nama tabel. |
| RANGE(ekspresi) | Ekspresi partisi. Harus bertipe INT. Tipe string tidak didukung. |
| daftar_kolom | Daftar partisi. Digunakan dalam LIST COLUMNS(). Ekspresi tidak didukung. |
| INTERVAL(tipe) | Tipe interval. Delapan tipe waktu didukung: YEAR, QUARTER, MONTH, WEEK, DAY, HOUR, MINUTE, dan SECOND. Jika Anda tidak menentukan tipe di sini, tipe numerik dipilih secara default. |
| INTERVAL(ekspresi) | Nilai interval. Jika tipe diatur ke SECOND, nilai tidak boleh kurang dari 60. |
| MAXVALUE | Nilai maksimum partisi. |
| nama_mesin | Nama mesin penyimpanan. |
Mengganti tabel biasa menjadi tabel partisi interval range
Anda dapat mengganti tabel yang ada menjadi tabel partisi interval range. Pilih kunci partisi yang sesuai dan definisikan partisi untuk data yang ada di tabel. Setelah pergantian selesai, data baru yang dimasukkan dapat memicu pembuatan otomatis partisi.
Contoh berikut mengganti tabel
orders menjadi tabel partisi interval range.CREATE TABLE orders(
orderkey BIGINT NOT NULL,
custkey BIGINT NOT NULL,
orderdate DATE NOT NULL
);
ALTER TABLE orders
PARTITION BY RANGE COLUMNS(orderdate) INTERVAL(MONTH, 1) (
PARTITION p0 VALUES LESS THAN('2021-10-01')
);Mengganti tabel partisi rentang menjadi tabel partisi interval range
Anda dapat mengganti tabel partisi rentang yang ada menjadi tabel partisi interval range. Definisikan partisi rentang interval untuk data yang ada di tabel. Setelah pergantian selesai, data baru yang dimasukkan dapat memicu pembuatan otomatis partisi. Gunakan salah satu metode berikut:
- Metode 1: Eksekusi pernyataan
ALTER TABLE nama_tabel opsi_partisiContoh berikut mengganti tabel partisiordersmenjadi tabel partisi interval range.CREATE TABLE orders( orderkey BIGINT NOT NULL, custkey BIGINT NOT NULL, orderdate DATE NOT NULL ) PARTITION BY RANGE(orderkey) ( PARTITION p0 VALUES LESS THAN(10000000) ); ALTER TABLE orders PARTITION BY RANGE COLUMNS(orderdate) INTERVAL(MONTH, 1) ( PARTITION p0 VALUES LESS THAN('2021-10-01') ); - Metode 2: Eksekusi pernyataan
ALTER TABLE nama_tabel SET { INTERVAL(tipe, ekspresi) | INTERVAL(ekspresi) }Contoh berikut mengganti tabel partisiordersmenjadi tabel partisi interval range.CREATE TABLE orders( orderkey BIGINT NOT NULL, custkey BIGINT NOT NULL, orderdate DATE NOT NULL ) PARTITION BY RANGE COLUMNS(orderdate) ( PARTITION p0 VALUES LESS THAN('2021-10-01') ); ALTER TABLE orders SET INTERVAL(MONTH, 1);
Mengganti tabel partisi interval range menjadi tabel partisi rentang
Anda dapat mengganti tabel partisi interval range yang ada menjadi tabel partisi rentang. Gunakan salah satu metode berikut:
- Metode 1: Eksekusi pernyataan
ALTER TABLE nama_tabel opsi_partisiContoh berikut mengganti tabel partisiordersmenjadi tabel partisi rentang.CREATE TABLE orders( orderkey BIGINT NOT NULL, custkey BIGINT NOT NULL, orderdate DATE NOT NULL ) PARTITION BY RANGE(orderkey) INTERVAL(100000) ( PARTITION p0 VALUES LESS THAN(10000000) ); ALTER TABLE orders PARTITION BY RANGE COLUMNS(orderdate) ( PARTITION p0 VALUES LESS THAN('2021-10-01') ); - Metode 2: Eksekusi pernyataan
ALTER TABLE nama_tabel SET { INTERVAL(tipe, ekspresi) | INTERVAL(ekspresi) }Contoh berikut mengganti tabel partisiordersmenjadi tabel partisi rentang.CREATE TABLE orders( orderkey BIGINT NOT NULL, custkey BIGINT NOT NULL, orderdate DATE NOT NULL ) PARTITION BY RANGE(orderkey) INTERVAL(100000) ( PARTITION p0 VALUES LESS THAN(10000000) ); ALTER TABLE orders SET INTERVAL(); /* Mengganti tabel partisi interval range menjadi tabel partisi rentang tanpa menentukan tipe dan nilai interval. */