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

PolarDB:HASH-LIST

最終更新日:Mar 28, 2026

HASH-LIST パーティションは、パーティション式をハッシュ化して行を複数のパーティションに分散させた後、離散値のリストに基づいて各行をサブパーティションに配置します。このパーティショニング戦略は、最上位レベル(ハッシュ)で均等なデータ分布を実現し、各パーティション内でカテゴリ別にグループ化する必要がある場合に使用します。

構文

CREATE TABLE [schema.]table_name
  table_definition
  PARTITION BY [LINEAR] HASH(expr)
    SUBPARTITION BY LIST (expr)
    (partition_definition [, partition_definition] ...)

partition_definition の構文は以下のとおりです。

PARTITION partition_name
  (subpartition_definition [, subpartition_definition] ...)

subpartition_definition の構文は以下のとおりです。

SUBPARTITION subpartition_name
  VALUES IN (value_list)

パラメーター

パラメーター説明
table_nameテーブル名です。
exprパーティション式です。INT 型である必要があります — 文字列型はサポートされていません。
value_listサブパーティションの境界値のリストです。
partition_nameパーティション名です。テーブル内で一意である必要があります。
subpartition_nameサブパーティション名です。テーブル内で一意である必要があります。
PARTITION BY HASH および SUBPARTITION BY LIST の両方の式は、INT 型の値を返す必要があります。いずれの式においても文字列型はサポートされていません。

HASH-LIST パーティションテーブルの作成

次の例では、sales_hash_list テーブルを作成します。dept_no をハッシュキーとしてパーティション化し、part_no をリストキーとしてサブパーティション化しています。このテーブルには 3 つのパーティションがあり、それぞれに値 1~6 をカバーする 3 つのサブパーティションが含まれます。

CREATE TABLE sales_hash_list
(
  dept_no     INT,
  part_no     INT,
  country     VARCHAR(20),
  date        DATE,
  amount      INT
)
PARTITION BY HASH(dept_no)
SUBPARTITION BY LIST(part_no)
(
  PARTITION dp0 (
    SUBPARTITION p0 VALUES IN (1, 2),
    SUBPARTITION p1 VALUES IN (3, 4),
    SUBPARTITION p2 VALUES IN (5, 6)
  ),
  PARTITION dp1 (
    SUBPARTITION p3 VALUES IN (1, 2),
    SUBPARTITION p4 VALUES IN (3, 4),
    SUBPARTITION p5 VALUES IN (5, 6)
  ),
  PARTITION dp2 (
    SUBPARTITION p6 VALUES IN (1, 2),
    SUBPARTITION p7 VALUES IN (3, 4),
    SUBPARTITION p8 VALUES IN (5, 6)
  )
);

行のルーティング方法

PolarDB では、各行のターゲットサブパーティションを決定するために、以下の 2 段階の処理を行います。

  1. ハッシュ段階dept_no をハッシュ化し、3 つのパーティションのいずれか(dp0dp1、または dp2)を選択します。

  2. リスト段階 — 選択されたパーティション内の part_no を、そのパーティションに定義された VALUES IN リストと照合し、該当するサブパーティションを選択します。

以下に、特定の行がどのようにルーティングされるかを示す例を記載します。ハッシュ段階で割り当てられるパーティションは、ハッシュ関数とパーティション数に依存します。

dept_nopart_no例:パーティションサブパーティション理由
53dp1p4dept_no=5dp1 にハッシュ化されます。part_no=3VALUES IN (3, 4)
26dp0p2dept_no=2dp0 にハッシュ化されます; part_no=6VALUES IN (5, 6)
91dp2p6dept_no=9dp2 にハッシュされる。part_no=1VALUES IN (1, 2)