ハッシュ・レンジ・パーティション方式では、テーブルのデータをハッシュパーティションに分割し、さらに各ハッシュパーティションを範囲ベースのサブパーティションに分割します。この戦略は、ハッシュ化によって行をパーティション間で均等に分散させる必要がある一方で、第2の列に対する範囲条件によるパーティション削減(pruning)も実現したい場合に使用します。
構文
CREATE TABLE [schema.]table_name
table_definition
PARTITION BY [LINEAR] HASH(expr)
SUBPARTITION BY RANGE (expr)
(partition_definition [, partition_definition] ...)partition_definition:
PARTITION partition_name
(subpartition_definition [, subpartition_definition] ...)subpartition_definition:
SUBPARTITION subpartition_name
VALUES LESS THAN {value | MAXVALUE}パラメーター
| パラメーター | 説明 |
|---|---|
table_name | テーブルの名前です。 |
expr | パーティション式です。INT 型である必要があります。文字列型はサポートされていません。 |
value | パーティションの境界値です。 |
MAXVALUE | パーティションの最大値です。 |
partition_name | パーティションの名前です。テーブル内で一意である必要があります。 |
subpartition_name | サブパーティションの名前です。テーブル内で一意である必要があります。 |
注意事項
partition_nameの値は、テーブル内で一意である必要があります。subpartition_nameの値は、テーブル内で一意である必要があります。
例
以下のステートメントは、sales_hash_range というテーブルを作成します。このテーブルには 3 つのハッシュパーティション(p0、p1、p2)が定義され、それぞれが part_no の値に基づく 4 つの範囲サブパーティションで構成されます。
CREATE TABLE sales_hash_range
(
dept_no INT,
part_no INT,
country VARCHAR(20),
date DATE,
amount INT
)
PARTITION BY HASH(dept_no)
SUBPARTITION BY RANGE(part_no)
(
PARTITION p0 (
SUBPARTITION s0 VALUES LESS THAN (4),
SUBPARTITION s1 VALUES LESS THAN (7),
SUBPARTITION s2 VALUES LESS THAN (10),
SUBPARTITION s3 VALUES LESS THAN (13)
),
PARTITION p1 (
SUBPARTITION s4 VALUES LESS THAN (4),
SUBPARTITION s5 VALUES LESS THAN (7),
SUBPARTITION s6 VALUES LESS THAN (10),
SUBPARTITION s7 VALUES LESS THAN (13)
),
PARTITION p2 (
SUBPARTITION s8 VALUES LESS THAN (4),
SUBPARTITION s9 VALUES LESS THAN (7),
SUBPARTITION s10 VALUES LESS THAN (10),
SUBPARTITION s11 VALUES LESS THAN (13)
)
);dept_no により、各行がどのハッシュパーティション(p0~p2)に属するかが決定されます。各パーティション内では、part_no の値に基づいてサブパーティションが選択されます。たとえば、4 未満の値は最初のサブパーティション、7 未満の値は2番目のサブパーティションへと割り当てられます。