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

Hologres:CREATE PARTITION TABLE

最終更新日:Jun 26, 2025

CREATE PARTITION TABLE ステートメントを実行して、パーティションテーブルを作成できます。このトピックでは、CREATE PARTITION TABLE ステートメントの使用方法について説明します。

説明

説明

特に明記されていない限り、このトピックで言及されている親テーブルは親パーティションテーブルを指し、子テーブルは子パーティションテーブルを指します。

親テーブルは、パーティションキーの値に基づいて異なる子テーブルに分割されます。子テーブルのデータは公開されています。パーティションテーブルを使用する前に、事前に子テーブルを作成する必要があります。CREATE PARTITION TABLE 文を実行して、パーティションテーブルを作成できます。また、テーブルの動的パーティション化を有効にして、子テーブルを自動的に作成することもできます。

パーティションテーブルの子テーブルは、異なるファイルに格納されます。パーティションテーブルのデータをクエリするには、パーティションを指定する必要があります。こうすることで、システムはテーブル内のすべてのパーティションをスキャンする必要がなくなり、目的のファイルをすばやく見つけることができます。これにより、効率が向上します。ほとんどの場合、ファクトテーブルは日付によって異なるパーティションに分割されます。パーティションテーブルの子テーブルは、メタデータストレージ内の非パーティションテーブルと同等です。したがって、パーティションの数が多いと、メタデータの量が増加し、多数の小さなファイルとフラグメントが発生します。

データソースがデータベースの場合は、パーティションテーブルを使用しないことをお勧めします。このシナリオでパーティションテーブルを使用すると、過剰なパーティションによって I/O リソースが浪費される可能性があります。この問題を解決し、インデックスベースのクエリアクセラレーションを実装するには、一般的に使用されるパーティションフィールドを指定してセグメントキーを構成できます。

制限

  • Hologres では、親テーブルではなく子テーブルにデータをインポートできます。

    説明

    Realtime Compute for Apache Flink では、Hologres の親テーブルにリアルタイムでデータをインポートできます。詳細については、「Hologres のパーティション結果テーブルにリアルタイムでデータを書き込む」をご参照ください。

  • 各パーティション化ルールは、1 つのパーティションテーブルの作成にのみ使用できます。

  • PARTITION BY 句は、リストパーティションのみをサポートしています。パーティションキーは単一列である必要があります。

  • パーティションテーブルにプライマリキーがある場合、パーティションキーはプライマリキーのサブセットである必要があります。

使用上の注意

  • 1 日のデータレコード数が 1 億未満の場合は、日付をパーティション条件として使用せず、日付でパーティションテーブルを作成しないことをお勧めします。そうしないと、各パーティションのサイズが小さくなり、クエリが大幅に高速化されません。より粗い粒度を指定することをお勧めします。

  • TRUNCATE 操作または DROP 操作を実行してパーティションのデータを頻繁に置き換える必要がある場合は、パーティションテーブルを使用することをお勧めします。このシナリオでパーティションテーブルを使用すると、大量のデータをスキャンすることなく、TRUNCATE 操作または DROP 操作をより効率的に実行できます。

パーティションテーブルを作成する

構文

次の文を使用して、パーティションテーブルを作成できます。

-- 親テーブルを作成します。
CREATE TABLE [IF NOT EXISTS] [<スキーマ名>.]<テーブル名>  ([
  {
   <列名> <列のデータ型> [ <列制約>, [...]]
   | <テーブル制約>
   [, ...]
  }
])
PARTITION BY LIST(<列名>);

-- 子テーブルを作成します。
CREATE TABLE [IF NOT EXISTS] [<スキーマ名>.]<テーブル名> PARTITION OF <親テーブル>
  FOR VALUES IN (<文字列リテラル>);

パラメーター

次の表は、上記の構文のパラメーターについて説明しています。

パラメーター

説明

if not exists

同じ名前のテーブルが既に存在する場合、システムはエラーメッセージを返さず、テーブルが既に存在することを通知します。

schema_name

テーブルが存在するスキーマの名前。同じスキーマに親テーブルと子テーブルを作成する場合、スキーマ名を指定する必要はありません。スキーマをまたいで親テーブルと子テーブルを作成する場合は、スキーマ名を指定する必要があります。

table_name

作成する親テーブルまたは子テーブルの名前。

column_name

新しいテーブルに作成する列の名前。

column_type

列のデータ型。

column_constraints

列制約の名前。

table_constraints

テーブル制約の名前。

parent_table

子テーブルの親テーブルの名前。

string_literal

パーティションキー。

TEXTVARCHAR、および INT データ型の列をパーティションキー列として使用できます。Hologres V1.3.22 以降では、DATE データ型の列をパーティションキー列として使用できます。

  • 例 1: public スキーマにプライマリキーのない親テーブルとその子テーブルを作成します。

    • Hologres V2.1 以降でサポートされている構文:

      BEGIN;
      CREATE TABLE public.hologres_parent (
          a TEXT,
          b INT,
          c TIMESTAMP,
          d TEXT
      )
      PARTITION BY LIST (a) 
      WITH (orientation = 'column');
      CREATE TABLE public.hologres_child1 PARTITION OF public.hologres_parent FOR VALUES IN ('v1');
      CREATE TABLE public.hologres_child2 PARTITION OF public.hologres_parent FOR VALUES IN ('v2');
      CREATE TABLE public.hologres_child3 PARTITION OF public.hologres_parent FOR VALUES IN ('v3');
      COMMIT;
    • すべての Hologres バージョンでサポートされている構文:

      BEGIN;
      CREATE TABLE public.hologres_parent(
        a TEXT, 
        b INT, 
        c TIMESTAMP, 
        d TEXT
      ) 
        PARTITION BY LIST(a);
      CALL set_table_property('public.hologres_parent', 'orientation', 'column');           
      CREATE TABLE public.hologres_child1 PARTITION OF public.hologres_parent FOR VALUES IN('v1');
      CREATE TABLE public.hologres_child2 PARTITION OF public.hologres_parent FOR VALUES IN('v2');
      CREATE TABLE public.hologres_child3 PARTITION OF public.hologres_parent FOR VALUES IN('v3');
      COMMIT;
  • 例 2: public スキーマにプライマリキーを持つ親テーブルとその子テーブルを作成します。

    Hologres V2.1 以降でサポートされている構文:

    BEGIN;
    CREATE TABLE public.hologres_parent_2 (
        a TEXT,
        b INT,
        c TIMESTAMP,
        d TEXT,
        ds TEXT,
        PRIMARY KEY (ds, b)
    )
    PARTITION BY LIST (ds) 
    WITH (orientation = 'column');
    CREATE TABLE public.holo_child_1 PARTITION OF public.hologres_parent_2 FOR VALUES IN ('20201215');
    CREATE TABLE public.holo_child_2 PARTITION OF public.hologres_parent_2 FOR VALUES IN ('20201216');
    CREATE TABLE public.holo_child_3 PARTITION OF public.hologres_parent_2 FOR VALUES IN ('20201217');
    COMMIT;

    すべての Hologres バージョンでサポートされている構文:

    BEGIN;
    CREATE TABLE public.hologres_parent_2(
      a TEXT , 
      b INT, 
      c TIMESTAMP, 
      d TEXT,
      ds TEXT,
      primary key(ds,b)
      )
      PARTITION BY LIST(ds);
    CALL set_table_property('public.hologres_parent_2', 'orientation', 'column');
    CREATE TABLE public.holo_child_1 PARTITION OF public.hologres_parent_2 FOR VALUES IN('20201215');
    CREATE TABLE public.holo_child_2 PARTITION OF public.hologres_parent_2 FOR VALUES IN('20201216');
    CREATE TABLE public.holo_child_3 PARTITION OF public.hologres_parent_2 FOR VALUES IN('20201217');
    COMMIT;

すべての子テーブルのクエリ

次のいずれかの方法を使用して、親テーブルのすべての子テーブルをクエリできます。

  • HoloWeb を使用して、親テーブルのすべての子テーブルを視覚的にクエリします。

  • 次の SQL ステートメントを実行して、親テーブルのすべての子テーブルをクエリします。SQL ステートメントでは、ビジネス要件に基づいて parent_table_name を変更します。

    SELECT
        nmsp_parent.nspname AS 親スキーマ,
        parent.relname      AS 親,
        nmsp_child.nspname  AS 子スキーマ,
        child.relname       AS 子
    FROM pg_inherits
        JOIN pg_class parent            ON pg_inherits.inhparent = parent.oid
        JOIN pg_class child             ON pg_inherits.inhrelid   = child.oid
        JOIN pg_namespace nmsp_parent   ON nmsp_parent.oid  = parent.relnamespace
        JOIN pg_namespace nmsp_child    ON nmsp_child.oid   = child.relnamespace
    WHERE parent.relname='parent_table_name'; 

親テーブルとその子テーブルのプロパティ設定に関するルール

次の表に、子テーブルが親テーブルに接続されている場合に適用されるプロパティ設定のルールを示します。次のルールが適用されます。

  • 親テーブルと一致している必要がある: 子テーブルのプロパティは、親テーブルのプロパティと一致している必要があります。そうでない場合、子テーブルが親テーブルにアタッチされているときにエラーが報告されます。この場合、CREATE TABLE LIKE 文を使用して子テーブルを作成することをお勧めします。

  • 親テーブルと一致する必要はありません:子テーブルのプロパティは、親テーブルのプロパティと異なっていてもかまいません。子テーブルのプロパティが明示的に指定されていない場合、子テーブルは親テーブルの対応するプロパティ設定を継承します。子テーブルのプロパティが明示的に指定されている場合、子テーブルのプロパティ設定は保持されます。

  • 親テーブルのインデックス付き列を含める必要があります:子テーブルのインデックス付き列には、親テーブルのインデックス付き列を含める必要があります。親テーブルのインデックス付き列として指定されていない列は、子テーブルに対して明示的に指定できます。

カテゴリ

テーブルプロパティ

説明

CREATE TABLE PARTITION OF ステートメントを実行して作成された子テーブルが、親テーブルからプロパティ設定を継承するかどうか

子テーブルが親テーブルに接続されている場合に適用されるルール

テーブルプロパティ

orientation

テーブルのストレージ形式。

はい

親テーブルと一致している必要があります。

table_group

テーブルが属するテーブルグループ。このプロパティは、テーブルグループのシャード数も指定します。

はい

親テーブルと一致している必要があります。

time_to_live_in_seconds

テーブル内のデータの有効期間(TTL)。

はい

親テーブルと一致する必要はありません。

  • このプロパティが子テーブルに指定されていない場合、子テーブルは親テーブルからプロパティ設定を継承します。

  • このプロパティが子テーブルに指定されている場合、指定されたプロパティ設定は保持されます。

インデックス

primary key

テーブルのプライマリキー。

はい

親テーブルと一致している必要があります。

distribution_key

テーブルの分散キー。

はい

親テーブルと一致している必要があります。

clustering_key

テーブルのクラスタリングキー。

はい

親テーブルと一致している必要があります。

event_time_column

テーブルのイベント時間列。

はい

親テーブルと一致している必要があります。

bitmap_columns

テーブルの辞書エンコード列。

はい

親テーブルと一致する必要はありません。

dictionary_encoding_columns

テーブルのフィールドインデックス。

はい

親テーブルと一致する必要はありません。

binlog_level

バイナリロギングを有効にするかどうかを指定します。

はい

親テーブルと一致している必要があります。

proxima_vectors

テーブルでベクトル検索を実行するために使用されるインデックス。

はい

親テーブルと一致している必要があります。

列制約

nullable

NOT NULL 制約。

はい

親テーブルと一致している必要があります。

default value

デフォルト値。

はい

親テーブルと一致している必要があります。

参照

  • Hologres の動的パーティション化機能は、パーティションテーブルの作成時に構成した動的パーティション化ルールに基づいて、子テーブルを自動的に作成および管理します。パーティションテーブルの作成時にすべてのパーティションを構成する必要はありません。詳細については、「動的パーティション化」をご参照ください。

  • ALTER PARTITION TABLE 文を実行して、パーティションを変更できます。詳細については、「ALTER PARTITION TABLE」をご参照ください。

  • DROP PARTITION TABLE 文を実行して、パーティションテーブルを削除できます。詳細については、「CREATE/DROP PARTITION TABLE」をご参照ください。