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

PolarDB:LIST-HASH

最終更新日:Mar 29, 2026

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_listLIST 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 個の物理パーティションが作成されます。