LIST-HASH パーティショニングは、テーブルを LIST パーティションに分割し、さらに各パーティションを HASH または KEY サブパーティションに細分化します。たとえば、LIST パーティションが 3 つあり、各パーティションに HASH サブパーティションが 2 つずつある場合、合計で 3 × 2 = 6 個の物理パーティションが生成されます。これにより、値に基づくルーティングと均等なデータ分散を組み合わせることができます。
構文
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] ...);ここで、partition_definition は次のとおりです。
PARTITION partition_name
VALUES IN (value_list)
(subpartition_definition [, subpartition_definition] ...)また、subpartition_definition は次のとおりです。
SUBPARTITION subpartition_nameパラメーター
| パラメーター | 説明 |
|---|---|
expr | パーティション式です。INT 型である必要があります。文字列型はサポートされていません。 |
number | 各パーティションあたりのサブパーティション数です。 |
column_list | LIST COLUMNS または KEY サブパーティショニングで使用するパーティションキー列です。式はサポートされず、列名のみ指定できます。 |
value_list | 各 LIST パーティションを定義する境界値です。 |
partition_name | パーティション名です。テーブル内で一意である必要があります。 |
subpartition_name | サブパーティション名です。テーブル内で一意である必要があります。 |
例
リスト-ハッシュ・パーティション表の作成
次の例では、sales_list_hash テーブルを amount(LIST)でパーティション化し、各パーティションを dept_no を基に 2 つの HASH バケットにサブパーティション化します。
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)
);これにより、合計で 3 × 2 = 6 個の物理パーティションが作成されます。
リストカラム-ハッシュ・パーティション表の作成
LIST COLUMNS を使用して、country のような整数以外の列でパーティション化できます。次の例では、LIST COLUMNS パーティションを 3 つ作成し、それぞれを 2 つの 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')
);これにより、合計で 3 × 2 = 6 個の物理パーティションが作成されます。