すべてのプロダクト
Search
ドキュメントセンター

PolarDB:レンジ-リスト

最終更新日:Mar 29, 2026

レンジ-リスト・パーティショニングでは、プライマリパーティション戦略として RANGE(または RANGE COLUMNS)を、サブパーティション戦略として LIST を使用します。各レンジパーティションには、1 つ以上のリストサブパーティションが含まれており、上位レベルで数値または日付の範囲に基づいて行を整理したうえで、各範囲内において離散的な値のセットに基づいてさらに細分化できます。

構文

CREATE TABLE ... PARTITION BY RANGE {(expr) | COLUMNS(column_list)}
   SUBPARTITION BY LIST(expr)
[(partition_definition [, partition_definition] ...)];

partition_definition

PARTITION partition_name
       VALUES LESS THAN {(value | value_list) | MAXVALUE}
[(subpartition_definition [, subpartition_definition] ...)]

subpartition_definition

SUBPARTITION subpartition_name
       VALUES IN (value_list2)

パラメーター

パラメーター説明
exprパーティション式です。INT 型である必要があります。文字列型はサポートされていません。
column_listRANGE COLUMNS() で使用されるパーティションキー列の一覧です。式はサポートされていません。
valueパーティションの境界値です。
value_listRANGE COLUMNS() で使用されるパーティションキー列の値の一覧です。
value_list2サブパーティションの境界値の一覧です。
MAXVALUEパーティションの最大値です。
partition_nameパーティション名です。テーブル内で一意である必要があります。
subpartition_nameサブパーティション名です。テーブル内で一意である必要があります。

レンジ-リスト・パーティション表の作成

以下のテーブルでは、売上データを amount(レンジ)でパーティション化し、さらに dept_no(リスト)でサブパーティション化しています。

CREATE TABLE sales_range_list
(
  dept_no     INT,
  part_no     INT,
  country     varchar(20),
  date        DATE,
  amount      INT
)
PARTITION BY RANGE(amount)
  SUBPARTITION BY LIST(dept_no)
(
  PARTITION m1 VALUES LESS THAN(1000) (
        SUBPARTITION p0 VALUES IN (1, 2),
        SUBPARTITION p1 VALUES IN (3, 4),
        SUBPARTITION p2 VALUES IN (5, 6)
  ),
  PARTITION m2 VALUES LESS THAN(2000) (
        SUBPARTITION p3 VALUES IN (1, 2),
        SUBPARTITION p4 VALUES IN (3, 4),
        SUBPARTITION p5 VALUES IN (5, 6)
  ),
  PARTITION m3 VALUES LESS THAN(MAXVALUE) (
        SUBPARTITION p6 VALUES IN (1, 2),
        SUBPARTITION p7 VALUES IN (3, 4),
        SUBPARTITION p8 VALUES IN (5, 6)
  )
);

レンジ・カラムズ-リスト・パーティション表の作成

以下のテーブルでは、RANGE COLUMNS を DATE 型の列に適用しており、整数以外のパーティションキーも使用可能です。

CREATE TABLE sales_range_columns_list
(
  dept_no     INT,
  part_no     INT,
  country     varchar(20),
  date        DATE,
  amount      INT
)
PARTITION BY RANGE COLUMNS(date)
  SUBPARTITION BY LIST(dept_no)
(
  PARTITION dp1 VALUES LESS THAN('2023-01-01') (
        SUBPARTITION p0 VALUES IN (1, 2),
        SUBPARTITION p1 VALUES IN (3, 4),
        SUBPARTITION p2 VALUES IN (5, 6)
  ),
  PARTITION dp2 VALUES LESS THAN('2024-01-01') (
        SUBPARTITION p3 VALUES IN (1, 2),
        SUBPARTITION p4 VALUES IN (3, 4),
        SUBPARTITION p5 VALUES IN (5, 6)
  ),
  PARTITION dp3 VALUES LESS THAN('2025-01-01') (
        SUBPARTITION p6 VALUES IN (1, 2),
        SUBPARTITION p7 VALUES IN (3, 4),
        SUBPARTITION p8 VALUES IN (5, 6)
  )
);