Partisi LIST-RANGE membagi sebuah tabel menjadi partisi LIST berdasarkan nilai diskret pada kolom tertentu, lalu membagi lebih lanjut setiap partisi tersebut menjadi subpartisi RANGE berdasarkan rentang numerik. Kasus penggunaan umumnya adalah mempartisi data penjualan menurut wilayah atau departemen (LIST), kemudian membagi lagi setiap partisi berdasarkan jumlah transaksi atau tanggal (RANGE).
Sintaks
CREATE TABLE [schema.]table_name
table_definition
PARTITION BY LIST {(expr) | COLUMNS(column_list)}
SUBPARTITION BY RANGE(expr)
(partition_definition [, partition_definition] ...);partition_definition adalah:
PARTITION partition_name
VALUES IN (value_list)
(subpartition_definition [, subpartition_definition] ...)subpartition_definition adalah:
SUBPARTITION subpartition_name
VALUES LESS THAN {value | MAXVALUE}Parameter
| Parameter | Deskripsi |
|---|---|
table_name | Nama tabel. |
expr | Ekspresi partisi. Harus bertipe INT. Tipe string tidak didukung. |
column_list | Daftar kolom untuk LIST COLUMNS(). Ekspresi tidak didukung. |
value | Nilai batas suatu subpartisi. |
value_list | Daftar nilai untuk partisi LIST. Digunakan dalam LIST COLUMNS(). |
MAXVALUE | Menangkap semua baris yang nilainya melebihi batas eksplisit terakhir. |
partition_name | Nama partisi. Harus unik dalam tabel tersebut. |
subpartition_name | Nama subpartisi. Harus unik di seluruh tabel. |
Contoh
Tabel partisi LIST-RANGE
Contoh berikut mempartisi tabel penjualan berdasarkan nomor departemen (LIST), lalu membagi lagi setiap kelompok departemen berdasarkan jumlah transaksi (RANGE).
CREATE TABLE sales_list_range
(
dept_no INT,
part_no INT,
country VARCHAR(20),
date DATE,
amount INT
)
PARTITION BY LIST (dept_no)
SUBPARTITION BY RANGE (amount)
(
PARTITION p0 VALUES IN (1, 2) (
SUBPARTITION s0 VALUES LESS THAN (1000),
SUBPARTITION s1 VALUES LESS THAN (2000),
SUBPARTITION s2 VALUES LESS THAN (3000),
SUBPARTITION s3 VALUES LESS THAN (MAXVALUE)
),
PARTITION p1 VALUES IN (3, 4) (
SUBPARTITION s4 VALUES LESS THAN (1000),
SUBPARTITION s5 VALUES LESS THAN (2000),
SUBPARTITION s6 VALUES LESS THAN (3000),
SUBPARTITION s7 VALUES LESS THAN (MAXVALUE)
),
PARTITION p2 VALUES IN (5, 6) (
SUBPARTITION s8 VALUES LESS THAN (1000),
SUBPARTITION s9 VALUES LESS THAN (2000),
SUBPARTITION s10 VALUES LESS THAN (3000),
SUBPARTITION s11 VALUES LESS THAN (MAXVALUE)
)
);Tabel partisi LIST COLUMNS-RANGE
Gunakan LIST COLUMNS ketika kunci partisi merupakan kolom non-integer, seperti nama negara. Contoh berikut mempartisi data penjualan berdasarkan negara (LIST COLUMNS), lalu membagi lagi setiap wilayah berdasarkan kuartal (RANGE berdasarkan nomor bulan).
CREATE TABLE sales_list_columns_range
(
dept_no INT,
part_no INT,
country VARCHAR(20),
date DATE,
amount INT
)
PARTITION BY LIST COLUMNS (country)
SUBPARTITION BY RANGE (MONTH(date))
(
PARTITION europe VALUES IN ('FRANCE', 'ITALY') (
SUBPARTITION q1_2012 VALUES LESS THAN (4),
SUBPARTITION q2_2012 VALUES LESS THAN (7),
SUBPARTITION q3_2012 VALUES LESS THAN (10),
SUBPARTITION q4_2012 VALUES LESS THAN (13)
),
PARTITION asia VALUES IN ('INDIA', 'PAKISTAN') (
SUBPARTITION q1_2013 VALUES LESS THAN (4),
SUBPARTITION q2_2013 VALUES LESS THAN (7),
SUBPARTITION q3_2013 VALUES LESS THAN (10),
SUBPARTITION q4_2013 VALUES LESS THAN (13)
),
PARTITION americas VALUES IN ('US', 'CANADA') (
SUBPARTITION q1_2014 VALUES LESS THAN (4),
SUBPARTITION q2_2014 VALUES LESS THAN (7),
SUBPARTITION q3_2014 VALUES LESS THAN (10),
SUBPARTITION q4_2014 VALUES LESS THAN (13)
)
);