Partisi LIST-HASH membagi sebuah tabel menjadi partisi LIST, kemudian membagi setiap partisi tersebut lebih lanjut menjadi subpartisi HASH atau KEY. Sebagai contoh, tabel dengan 3 partisi LIST dan 2 subpartisi HASH per partisi menghasilkan total 3 × 2 = 6 partisi fisik—menggabungkan routing berbasis nilai dengan distribusi data yang merata.
Sintaksis
CREATE TABLE [schema.]table_name
table_definition
PARTITION BY LIST {(expr) | COLUMNS (column_list)}
SUBPARTITION BY {
[LINEAR] HASH (expr) [SUBPARTITIONS number]
| [LINEAR] KEY [ALGORITHM={1|2}] (column_list)
}
(partition_definition [, partition_definition] ...);Di mana partition_definition adalah:
PARTITION partition_name
VALUES IN (value_list)
(subpartition_definition [, subpartition_definition] ...)Dan subpartition_definition adalah:
SUBPARTITION subpartition_nameParameter
| Parameter | Deskripsi |
|---|---|
expr | Ekspresi partisi. Harus bertipe INT; tipe string tidak didukung. |
number | Jumlah subpartisi per partisi. |
column_list | Kolom kunci partisi untuk partisi LIST COLUMNS atau subpartisi KEY. Ekspresi tidak didukung; hanya nama kolom yang diperbolehkan. |
value_list | Nilai batas yang menentukan setiap partisi LIST. |
partition_name | Nama partisi. Harus unik dalam tabel. |
subpartition_name | Nama subpartisi. Harus unik dalam tabel. |
Contoh
Buat tabel terpartisi list-hash
Contoh berikut mempartisi tabel sales_list_hash berdasarkan kolom amount (LIST), lalu membagi setiap partisi menjadi 2 bucket HASH berdasarkan kolom dept_no.
CREATE TABLE sales_list_hash
(
dept_no INT,
part_no INT,
country VARCHAR(20),
date DATE,
amount INT
)
PARTITION BY LIST(amount)
SUBPARTITION BY HASH(dept_no) SUBPARTITIONS 2
(
PARTITION p0 VALUES IN (1, 2),
PARTITION p1 VALUES IN (3, 4),
PARTITION p2 VALUES IN (5, 6)
);Ini menghasilkan total 3 × 2 = 6 partisi fisik.
Buat tabel terpartisi list columns-hash
Gunakan LIST COLUMNS untuk mempartisi berdasarkan kolom non-integer seperti country. Contoh berikut membuat 3 partisi LIST COLUMNS, masing-masing dibagi menjadi 2 subpartisi HASH.
CREATE TABLE sales_list_columns_hash
(
dept_no INT,
part_no INT,
country VARCHAR(20),
date DATE,
amount INT
)
PARTITION BY LIST COLUMNS(country)
SUBPARTITION BY HASH(dept_no) SUBPARTITIONS 2
(
PARTITION europe VALUES IN ('FRANCE', 'ITALY'),
PARTITION asia VALUES IN ('INDIA', 'PAKISTAN'),
PARTITION americas VALUES IN ('US', 'CANADA')
);Ini menghasilkan total 3 × 2 = 6 partisi fisik.