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

Hologres:Hologres :動的パーティション管理

最終更新日:Aug 22, 2026

Hologres の自動パーティショニング機能は、パーティションテーブルに定義したルールに基づいてパーティションの作成と管理を自動化し、事前設定を不要にします。また、この機能はクエリパフォーマンスに影響を与えることなく、対象となるデータをコールドストレージに移動し、ストレージコストを削減します。

概要

自動パーティショニング機能は、複数の Hologres バージョンを経て進化してきました。

  • Hologres V1.3: 自動パーティショニングを導入しました。この機能は、ユーザー定義のルールに基づいて、スケジュールされたタスクを定期的に実行し、パーティションを事前作成および削除します。

  • Hologres V1.3.37: 階層型ストレージのサポートを追加しました。この機能は、データを自動的にコールドストレージにアーカイブすることで、ストレージコストを削減します。詳細については、「階層型ストレージ」をご参照ください。

  • Hologres V2.1.11 以降、自動パーティショニングは Date 型をパーティションキーとしてサポートします。

  • Hologres V2.2: 自動パーティショニング設定に schd_start_time プロパティを追加しました。このプロパティを使用すると、パーティションの作成、削除、アーカイブのスケジュールをカスタマイズできます。

  • Hologres V3.0.12: auto_partitioning_time_format パラメーターを追加しました。このパラメーターを使用すると、パーティションキーの日付と時刻のフォーマットを指定して、YYYY-MM-DD フォーマットでパーティションを作成できます。

注意事項

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

    説明

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

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

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

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

  • 動的パーティショニングの場合、スケジュール時刻 (schd_start_time) は親テーブルにのみ適用され、その子テーブルには適用されません。

  • auto_partitioning_time_format パラメーターは不変です。新しいテーブルの CREATE TABLE 文では指定できますが、既存のテーブルでは変更できません。

  • 子テーブルの名前は、auto_partitioning_time_format パラメーターで指定された日付フォーマットに従います。子テーブルをクエリする場合、その名前を二重引用符で囲む必要があります。例: SELECT xxx FROM "tbl_2024_11_22"

自動パーティショニングの設定

構文

パーティションテーブルの作成時、または既存のパーティションテーブルについて、自動パーティショニングのプロパティを設定できます。

WITH 句の使用

  • パーティションテーブルを作成する際に、自動パーティショニングのプロパティを設定します。

    -- パーティションテーブルを作成する際に、自動パーティショニングのプロパティを設定します。
    CREATE TABLE [IF NOT EXISTS] [<schema_name>.]<table_name>  ([
      {
       <column_name> <column_type> [ <column_constraints>, [...]]
       | <table_constraints>
       [, ...]
      }
    ])
    PARTITION BY LIST(<column_name>)
    WITH (
       auto_partitioning_enable = 'xxx',
       auto_partitioning_time_unit = 'xxx',
       auto_partitioning_time_zone = 'xxx',
       auto_partitioning_num_precreate = 'xxx',
       auto_partitioning_num_retention = 'xxx',
       auto_partitioning_num_hot='xxx',
       -- 注:auto_partitioning_schd_start_time プロパティは Hologres V2.2 以降でサポートされています。
       auto_partitioning_schd_start_time = 'xxx',
       -- 注:auto_partitioning_time_format プロパティは Hologres V3.0.12 以降でサポートされています。
       auto_partitioning_time_format = 'xxx'
    );
  • 既存のパーティションテーブルの自動パーティショニングプロパティを変更します。

    -- 自動パーティショニングのプロパティを変更します。
    ALTER TABLE [<schema_name>.]<table_name> SET (
       auto_partitioning_enable = 'xxx',
       auto_partitioning_num_precreate = 'xxx',
       auto_partitioning_num_retention = 'xxx',
       auto_partitioning_num_hot='xxx',
       -- 注:auto_partitioning_schd_start_time プロパティは Hologres V2.2 以降でサポートされています。
       auto_partitioning_schd_start_time = 'xxx'
    );
    

CALL コマンドの使用

  • パーティションテーブルを作成する際に、自動パーティショニングのプロパティを設定します。

    -- パーティションテーブルを作成する際に、自動パーティショニングのプロパティを設定します。
    BEGIN;
    CREATE TABLE [IF NOT EXISTS] [<schema_name>.]<table_name>  ([
      {
       <column_name> <column_type> [ <column_constraints>, [...]]
       | <table_constraints>
       [, ...]
      }
    ])
    PARTITION BY LIST(<column_name>);
    CALL set_table_property('[<schema_name>.]<table_name>', 'auto_partitioning.enable', 'xxx');
    CALL set_table_property('[<schema_name>.]<table_name>', 'auto_partitioning.time_unit', 'xxx');
    CALL set_table_property('[<schema_name>.]<table_name>', 'auto_partitioning.time_zone', 'xxx');
    CALL set_table_property('[<schema_name>.]<table_name>', 'auto_partitioning.num_precreate', 'xxx');
    CALL set_table_property('[<schema_name>.]<table_name>', 'auto_partitioning.num_retention', 'xxx');
    CALL set_table_property('[<schema_name>.]<table_name>', 'auto_partitioning.num_hot', 'xxx');
    -- 注:auto_partitioning.schd_start_time プロパティは Hologres V2.2 以降でサポートされています。
    CALL set_table_property ('[<schema_name>.]<table_name>', 'auto_partitioning.schd_start_time', 'xxx');
    -- 注:auto_partitioning.time_format プロパティは Hologres V3.0.12 以降でサポートされています。
    CALL set_table_property ('[<schema_name>.]<table_name>', 'auto_partitioning.time_format', 'xxx');
    COMMIT;
  • 既存のパーティションテーブルの自動パーティショニングプロパティを変更します。

    -- 自動パーティショニングのプロパティを変更します。
    CALL set_table_property('[<schema_name>.]<table_name>', 'auto_partitioning.enable', 'xxx');
    CALL set_table_property('[<schema_name>.]<table_name>', 'auto_partitioning.num_precreate', 'xxx');
    CALL set_table_property('[<schema_name>.]<table_name>', 'auto_partitioning.num_retention', 'xxx');
    CALL set_table_property('[<schema_name>.]<table_name>', 'auto_partitioning.num_hot', 'xxx');
    -- 注:auto_partitioning.schd_start_time プロパティは Hologres V2.2 以降でサポートされています。
    CALL set_table_property ('[<schema_name>.]<table_name>', 'auto_partitioning.schd_start_time', 'xxx');

パラメーター

重要

CREATE TABLE WITH 構文で自動パーティショニングを設定する場合、プロパティ名のドット (.) をアンダースコア (_) に置き換える必要があります。たとえば、auto_partitioning.enableauto_partitioning_enable に変更します。

パラメーター

必須

説明

更新可能

バージョン要件

auto_partitioning_enable/auto_partitioning.enable

いいえ

自動パーティショニングを有効にするかどうかを制御します。有効な値:

  • true:自動パーティショニングを有効にします。

  • false (デフォルト):自動パーティショニングを無効にします。

はい

Hologres V1.3 以降

auto_partitioning_time_unit/auto_partitioning.time_unit

はい

パーティショニングの時間単位を指定します。有効な値:

  • HOUR

  • DAY

  • MONTH

  • QUARTER

  • YEAR

たとえば、このプロパティを DAY に設定すると、Hologres はパーティションを毎日事前作成および削除します。

いいえ

auto_partitioning_time_zone/auto_partitioning.time_zone

いいえ

パーティショニングのタイムゾーンを指定します。デフォルトでは、現在のセッションのタイムゾーンが使用されます。このプロパティを設定すると、Hologres は指定されたタイムゾーンに基づいてパーティションを管理します。

次の SQL ステートメントを実行すると、利用可能なタイムゾーンを表示できます。結果の name 列 (例: Asia/Shanghai) が有効な タイムゾーン の値です。

SELECT * FROM pg_timezone_names;

いいえ

auto_partitioning_num_precreate/auto_partitioning.num_precreate

いいえ

事前作成するパーティションの数を指定します。有効な値:

  • 0:パーティションを事前作成しません。

  • 1 から 512 までの整数:現在の時間単位から始まる将来のパーティションをいくつか事前作成します。2 以上の値を推奨します。デフォルト: 4

説明

たとえば、現在の日付が 2022-01-10 で、 time_unit = DAY, num_precreate = 3 と設定した場合、 Hologres は 2022-01-10、2022-01-11、および 2022-01-12 のパーティションを作成します。

重要

パーティションを事前作成すると、MAX_PT 関数の動作に影響します。このプロパティを使用する前に、MAX_PT 関数に依存するアプリケーションへの影響を確認してください。

はい

auto_partitioning_num_retention/auto_partitioning.num_retention

いいえ

保持する履歴パーティションの数を指定します。有効な値:

  • 0:履歴パーティションを保持しません。

  • -1 (デフォルト):すべての履歴パーティションを保持します。

  • 正の整数: N 個の履歴パーティションを保持します。最大値は 512 です。

set hg_experimental_auto_part_max_maintained_partitions=<value>; を実行して、保持されるパーティションの最大数を 8,760 まで調整できます。

説明

たとえば、現在の日付が 2022-01-10 で、time_unit = DAY, num_retention = 3 の場合、Hologres は 2022-01-09、2022-01-08、および 2022-01-07 のパーティションを保持します。2022-01-07 より前に作成されたパーティションは削除されます。

はい

auto_partitioning_num_hot/auto_partitioning.num_hot

いいえ

保持するホットパーティションの数を指定します。ホットパーティションは、ホットストレージにあるパーティションです。有効な値:

  • 0:ホットパーティションを保持しません。

  • -1 (デフォルト):すべてのホットパーティションを保持します。

  • 正の整数: N 個のホットパーティションを保持します。最大値は 512 です。

はい

Hologres V1.3.37 以降

auto_partitioning_schd_start_time/auto_partitioning.schd_start_time

いいえ

パーティショニングタスクを実行するカスタム時刻を指定します。デフォルトでは、Hologres はこのタスクを、auto_partitioning.time_unitHOUR の場合は毎時 0 分に、他のすべての時間単位では 00:00:01 に実行します。

このプロパティを使用して、スケジュール時刻を変更できます。サポートされているフォーマットについては、「時刻フォーマット」をご参照ください。現在より後の時刻を設定した場合、その時刻にスケジュールが有効になります。

はい

Hologres V2.2 以降

auto_partitioning_time_format/auto_partitioning.time_format

いいえ

パーティションキーの値の文字列フォーマットを指定します。

  • デフォルトのフォーマット: YYYYMMDDHH24 (HOUR)、YYYYMMDD (DAY)、YYYYMM (MONTH)、YYYYQ (QUARTER)、YYYY (YEAR)。

  • オプションのフォーマット: YYYY-MM-DD-HH24 (HOUR)、YYYY-MM-DD (DAY)、YYYY-MM (MONTH)、YYYY-Q (QUARTER)。

いいえ

Hologres V3.0.12 以降

子テーブルの命名規則

auto_partitioning.time_unit プロパティを HOURDAYMONTHQUARTER、または YEAR に設定すると、Hologres は親テーブル名に時間サフィックスを追加して新しい子テーブルに名前を付けます。フォーマットは {parent_table}_{time_suffix} です。時間サフィックスは、自動パーティショニングのスケジュールと、指定された時間単位のフォーマットテンプレートに基づいて生成されます。次の表にマッピングを示します。

時間単位

時間サフィックスのフォーマット

サフィックスの例

スケジュール時刻

HOUR

YYYYMMDDHH24

2024112221

各時間の開始時。 例:2024年11月22日 21:00:01。

YYYY-MM-DD-HH24

2024-11-22-21

DAY

YYYYMMDD

20241122

毎日 00:00:01。 例:2024年11月22日 00:00:01。

YYYY-MM-DD

2024-11-22

MONTH

YYYYMM

202411

毎月 1 日の 00:00:01。 例:2024年11月1日 00:00:01。

YYYY-MM

2024-11

QUARTER

YYYYQ

20241202422024320244 は 2024 年の 4 つの四半期を表します。

各四半期の初日の 00:00:01。 例:2024年1月1日 00:00:01。

YYYY-Q

2024-12024-22024-32024-4 は 2024 年の 4 つの四半期を表します。

YEAR

YYYY

20232024 は、2023年と2024年のパーティションを表します。

毎年 1 月 1 日の 00:00:01。 例:2023年1月1日 00:00:01。

次の例では、日単位でパーティション分割されたテーブルを作成します。このテーブルは、今後 3 日間のパーティションを事前作成し、過去 2 日間の履歴パーティションを保持し、Asia/Shanghai タイムゾーンを使用するように設定されています。

WITH 句の使用

  1. パーティションテーブル tbl1 を作成します。

    -- パーティションテーブルを作成し、自動パーティショニングを設定します。
    CREATE TABLE tbl1 (
        c1 TEXT NOT NULL,
        c2 TEXT 
    )
    PARTITION BY LIST (c2)
    WITH (
       auto_partitioning_enable = 'true',
       auto_partitioning_time_unit = 'DAY',
       auto_partitioning_time_zone = 'Asia/Shanghai',
       auto_partitioning_num_precreate = '3',
       auto_partitioning_num_retention = '2'
    );
    
  2. データを挿入します。

    INSERT INTO tbl1 (c1, c2) VALUES ('Data 1', '20231212');
    INSERT INTO tbl1 (c1, c2) VALUES ('Data 2', '20231213');
    INSERT INTO tbl1 (c1, c2) VALUES ('Data 3', '20231214');
  3. データをクエリします。

    SELECT * FROM tbl1 WHERE c2='20231212';

    次の結果が返されます:

    c1	     c2
    Data 1   20231212

CALL コマンドの使用

  1. パーティションテーブル tbl1 を作成します。

    -- パーティションテーブルを作成し、自動パーティショニングを設定します。
    BEGIN;
    CREATE TABLE tbl1 (
        c1 TEXT NOT NULL,
        c2 TEXT 
    )
    PARTITION BY LIST (c2);
    CALL set_table_property ('tbl1', 'auto_partitioning.enable', 'true');
    CALL set_table_property ('tbl1', 'auto_partitioning.time_unit', 'DAY');
    CALL set_table_property ('tbl1', 'auto_partitioning.time_zone', 'Asia/Shanghai');
    CALL set_table_property ('tbl1', 'auto_partitioning.num_precreate', '3');
    CALL set_table_property ('tbl1', 'auto_partitioning.num_retention', '2');
    COMMIT;
  2. データを挿入します。

    INSERT INTO tbl1 (c1, c2) VALUES ('Data 1', '20231212');
    INSERT INTO tbl1 (c1, c2) VALUES ('Data 2', '20231213');
    INSERT INTO tbl1 (c1, c2) VALUES ('Data 3', '20231214');
  3. データをクエリします。

    SELECT * FROM tbl1 WHERE c2='20231212';

    次の結果が返されます:

    c1	     c2
    Data 1   20231212

次の表に、パーティションの作成と削除のロジックを示します。

時刻

イベント

結果

2023-12-12 09:00:00

前述の SQL ステートメントを実行して、パーティションテーブルを作成します。

  • 作成された親テーブル: tbl1

  • 作成された子テーブル: tbl1_20231212tbl1_20231213tbl1_20231214

2023-12-13 00:00:00

システムが自動的に子テーブルを作成します。

  • 作成された子テーブル: tbl1_20231215

2023-12-14 00:00:00

システムが自動的に子テーブルを作成します。

  • 作成された子テーブル: tbl1_20231216

2023-12-15 00:00:00

システムが自動的に子テーブルを作成し、古い子テーブルを削除します。

  • 作成された子テーブル: tbl1_20231217

  • 削除された子テーブル: tbl1_20231212

2023-12-16 00:00:00

システムが自動的に子テーブルを作成し、古い子テーブルを削除します。

  • 作成された子テーブル: tbl1_20231218

  • 削除された子テーブル: tbl1_20231213

ユースケース

特定の子テーブルの保持

デフォルトでは、Hologres は設定された自動パーティショニングルールに基づいて子テーブルを自動的に作成・削除し、保持範囲外のテーブルを削除します。ただし、一部のシナリオでは、重要なデータを保持する必要がある場合があります。例えば、E コマースビジネスで、前年比分析のために年に一度のショッピングフェスティバルのデータを保持する場合などです。特定の子テーブルを保持するには、それらに keep_alive プロパティを設定します。構文は次のとおりです:

  • Hologres V2.1 以降の構文:

    -- 子テーブルを保持します。
    ALTER TABLE [<schema_name>.]<table_name> SET (keep_alive = 'true');
    -- 子テーブルの保持を停止します。このプロパティを削除すると、自動パーティショニングは直ちに期限切れデータのクリーンアップをトリガーします。
    ALTER TABLE [<schema_name>.]<table_name> SET (keep_alive = 'false');
    
  • すべてのバージョンの構文:

    -- 子テーブルを保持します。
    CALL set_table_property('[<schema_name>.]<table_name>', 'keep_alive', 'true');
    -- 子テーブルの保持を停止します。このプロパティを削除すると、自動パーティショニングは直ちに期限切れデータのクリーンアップをトリガーします。
    CALL set_table_property('[<schema_name>.]<table_name>', 'keep_alive', 'false');
    説明

    table_name を子テーブルの名前に置き換えてください。

パーティションテーブルのストレージ階層の管理

パーティションテーブルを管理する際、ストレージ階層化はコストとパフォーマンスのバランスを取るのに役立ちます。例えば、頻繁なクエリのために最新の N 個の履歴パーティションをホットストレージに保持し、続く M 個の古いパーティションをコールドストレージに格納してコストを削減できます。自動パーティショニングと組み合わせることで、この機能により N+M の保持期間外のデータを自動的に削除するポリシーを定義できます。

自動パーティションテーブルの作成

次の例では、日単位でパーティション化されたテーブルを作成します。このポリシーは、直近 7 日間のパーティションをホットストレージに保持し、その前の 23 日間のパーティションをコールドストレージに保持します。30 日より古いパーティションは自動的に削除されます。

BEGIN;
CREATE TABLE tbl2(	
  c1 text not null, 
  c2 text
)
PARTITION BY LIST(c2);
CALL set_table_property('tbl2', 'auto_partitioning.enable', 'true');
CALL set_table_property('tbl2', 'auto_partitioning.time_unit', 'DAY');
CALL set_table_property('tbl2', 'auto_partitioning.num_precreate', '3');
CALL set_table_property('tbl2', 'auto_partitioning.num_hot', '7');
CALL set_table_property('tbl2', 'auto_partitioning.num_retention', '30');
COMMIT;

結果は次の図のとおりです。

效果

ストレージ階層化ポリシーの変更

auto_partitioning.num_hot パラメーターの値を変更することで、ホットストレージパーティションポリシーを変更できます。ただし、このポリシーを変更しても、Hologres はすでにコールドストレージにある子テーブルを自動的にホットストレージに戻しません。現在の日付が 2022 年 7 月 1 日であり、次のパーティションテーブルを作成したと仮定します:

BEGIN;
CREATE TABLE tbl_p(
  c1 text not null,
  c2 text
)
PARTITION BY LIST(c2);
CALL set_table_property('tbl_p', 'auto_partitioning.enable', 'true');
CALL set_table_property('tbl_p', 'auto_partitioning.time_unit', 'DAY');
CALL set_table_property('tbl_p', 'auto_partitioning.num_precreate', '3');
CALL set_table_property('tbl_p', 'auto_partitioning.num_hot', '3');
CALL set_table_property('tbl_p', 'auto_partitioning.num_retention', '10');
COMMIT;

これにより、データ分散に関して次の 2 つのシナリオが発生する可能性があります:

  • シナリオ 1: ホットパーティション数の増加

    ホットパーティションポリシーを 4 つのパーティションを保持するように変更するには、次のコードを実行します:

    CALL set_table_property('tbl_p', 'auto_partitioning.num_hot', '4');

    すでにコールドストレージにある子テーブルは自動的にホットストレージに移動されないため、変更の効果は次の図のようになります。示例

  • シナリオ 2: ホットパーティション数の減少

    ホットパーティションポリシーを 2 つのパーティションを保持するように変更する必要がある場合は、次のコードを実行します:

    CALL set_table_property('tbl_p', 'auto_partitioning.num_hot', '2');

    コールドストレージ内の子テーブルは自動的にホットストレージに移動されません。ただし、Hologres は、新たにコールドストレージの対象となったデータをコールドストレージ階層に移動します。変更の効果は次の図のようになります。示例

コールドテーブルから自動パーティションテーブルへの変換

コールドストレージのパーティションテーブルを自動パーティションテーブルに変換し、直近 7 日間のパーティションをホットストレージに移動するには、次の手順に従います:

  1. データを準備します:

    -- テーブル作成時にコールドストレージ階層を指定します。
    BEGIN;
    CREATE TABLE tbl2(	
      c1 TEXT NOT NULL, 
      c2 TEXT 
    )
    PARTITION BY LIST(c2);
    CALL set_table_property('tbl2', 'storage_mode', 'cold');
    CREATE TABLE tbl2_20230808 PARTITION OF tbl2 FOR VALUES IN('20230808');
    CREATE TABLE tbl2_20230809 PARTITION OF tbl2 FOR VALUES IN('20230809');
    CREATE TABLE tbl2_20230810 PARTITION OF tbl2 FOR VALUES IN('20230810');
    CREATE TABLE tbl2_20230817 PARTITION OF tbl2 FOR VALUES IN('20230817');
    COMMIT;
  2. テーブルを自動パーティションテーブルに変換し、直近 7 日間のパーティションをホットストレージに設定します:

    BEGIN;
    CALL set_table_property('tbl2', 'storage_mode', 'hot'); -- 親テーブルをホットストレージに設定します。
    CALL set_table_property('tbl2_20230810', 'storage_mode', 'cold'); -- ホットストレージに移動する必要のない子テーブルをコールドストレージに設定します。
    CALL set_table_property('tbl2_20230809', 'storage_mode', 'cold');
    CALL set_table_property('tbl2_20230808', 'storage_mode', 'cold');
    CALL set_table_property('tbl2', 'auto_partitioning.enable', 'true');
    CALL set_table_property('tbl2', 'auto_partitioning.time_unit', 'DAY');
    CALL set_table_property('tbl2', 'auto_partitioning.num_precreate', '3');
    CALL set_table_property('tbl2', 'auto_partitioning.num_hot', '7');
    CALL set_table_property('tbl2', 'auto_partitioning.num_retention', '10');
    COMMIT;

自動パーティショニング設定とスケジュールの確認

現在のデータベース内の自動パーティションテーブルの情報と設定をクエリするには、次の SQL ステートメントを実行します:

SELECT
    nsp_name AS schema_name,
    tbl_name AS table_name,
    ENABLE,
    time_unit,
    time_zone,
    num_precreate,
    num_retention,
    b.usename AS create_user,
    cret_time,
    schd_start_time,
    options
FROM
    hologres.hg_partitioning_config AS a
    LEFT JOIN pg_user AS b ON a.cret_user = b.usesysid;

次の表に、クエリ結果のフィールドを示します:

パラメーター

説明

schema_name

テーブルのスキーマ名。

table_name

テーブル名。

ENABLE

自動パーティショニングが有効かどうかを示します。

time_unit

自動パーティショニングの時間単位。

time_zone

自動パーティショニングのタイムゾーン。

num_precreate

事前作成されるパーティションの数。

num_retention

保持する履歴パーティションの数。

create_user

設定を作成したユーザー。

cret_time

設定が作成された時刻。

schd_start_time

パーティショニングタスクが実行されるようにスケジュールされた直近の時刻。

次のコードブロックは、クエリ結果のサンプルを示しています:

 schema_name |       table_name       | enable | time_unit | time_zone | num_precreate | num_retention |   create_user    |          cret_time          |     schd_start_time      | options
-------------+------------------------+--------+-----------+-----------+---------------+---------------+------------------+-----------------------------+--------------------------+---------
 public      | test_auto_part_daily      | t      | day       | PRC       |             4 |            -1 | 1534141793071340 | 2022-04-01 11:45:33+08 | 2050-01-01 00:00:00+08 | {}
 public      | test_auto_part_hourly     | t      | hour      | PRC       |             4 |            -1 | 1534141793071340 | 2022-04-01 11:44:39+08 | 2050-01-03 18:00:00+08 | {}
 public      | test_auto_part_weekly     | t      | week      | PRC       |             2 |             3 | 1534141793071340 | 2022-04-01 11:45:43+08 | 2050-01-03 00:00:00+08 | {}
 public      | test_auto_part_monthly    | t      | month     | PRC       |             1 |             0 | 1534141793071340 | 2022-04-01 11:45:55+08 | 2050-01-01 00:00:00+08 | {}
 public      | test_auto_part_quarterly  | t      | quarter   | PRC       |             2 |            -1 | 1534141793071340 | 2022-04-01 11:46:09+08 | 2050-01-01 00:00:00+08 | {}
 public      | test_auto_part_yearly     | t      | year      | PRC       |             1 |            -1 | 1534141793071340 | 2022-04-01 11:46:18+08 | 2050-01-01 00:00:00+08 | {}
(6 rows)

子テーブルログの確認

クエリログには、子テーブルの作成またはパージのログは記録されません。これらのログをクエリするには、次の SQL ステートメントを実行します:

SELECT                           
    relname,
    relowner,
    schdtime,
    trigtime,
    status,
    message,
    precreate,
    discard
FROM
    hologres.hg_partitioning_log 

次の表に、クエリ結果のフィールドを示します:

パラメーター

説明

relname

schema.table 形式のスキーマ名とテーブル名。

relowner

パーティションテーブルの所有者。

schdtime

スケジュールされた時刻。

trigtime

実際のトリガー時刻。

status

ステータス。

message

実行の詳細またはエラーメッセージ。

precreate

作成された子テーブルの名前。

discard

パージされた子テーブルの名前。

次のコードブロックは、クエリ結果のサンプルを示しています:

   relname   |     relowner     |        schdtime        |        trigtime        | status  | message |          precreate           |     discard
-----------+------------------+------------------------+------------------------+---------+---------+------------------------------+------------------
 public.tbl1 | 1534141793071340 | 2022-04-01 11:00:00+08 | 2022-04-01 11:24:22+08 | SUCCESS |         | {tbl1_2022032713,tbl1_2022032714} | {}
 public.tbl2 | 1534141793071340 | 2022-04-01 12:00:00+08 | 2022-04-01 12:38:31+08 | SUCCESS |         | {tbl2_2022040112}                 | {}
 public.tbl2 | 1534141793071340 | 2022-04-01 13:00:00+08 | 2022-04-01 13:00:00+08 | SUCCESS |         | {tbl2_2022040113}                 | {}
 public.tbl2 | 1534141793071340 | 2022-04-01 14:00:00+08 | 2022-04-01 14:00:00+08 | SUCCESS |         | {tbl2_2022040114}                 | {tbl2_2022040112}
(4 rows)

よくある質問

既存テーブルでの自動パーティショニングの有効化

既存のパーティションテーブルで自動パーティショニングを有効にするには、次のいずれかの SQL ステートメントを実行します。

-- Hologres V2.1 以降の例
ALTER TABLE auto_part_old SET (
   auto_partitioning_enable = 'true',
   auto_partitioning_time_unit = 'HOUR',
   auto_partitioning_time_zone = 'PRC',
   auto_partitioning_num_precreate = '4',
   auto_partitioning_num_retention = '-1',
   auto_partitioning_num_hot = '-1'
);
-- すべての Hologres バージョンの例
BEGIN;
CALL set_table_property('auto_part_old', 'auto_partitioning.enable', 'true');
CALL set_table_property('auto_part_old', 'auto_partitioning.time_unit', 'HOUR');
CALL set_table_property('auto_part_old', 'auto_partitioning.time_zone', 'PRC');
CALL set_table_property('auto_part_old', 'auto_partitioning.num_precreate', '4');
CALL set_table_property('auto_part_old', 'auto_partitioning.num_retention', '-1');
CALL set_table_property('auto_part_old', 'auto_partitioning.num_hot', '-1');
COMMIT;
重要

auto_partitioning.time_unit プロパティと auto_partitioning.time_zone プロパティは、自動パーティショニングのコア設定です。いったん設定すると、これらのプロパティは変更できません。

既存子テーブルの自動クリーンアップ

システムは、子テーブル名に基づいて子テーブルを削除するかどうかを判断します。子テーブル名が {parent_table}_{time_suffix} の命名規則に一致する場合、クリーンアップの対象になります。一致しない場合、クリーンアップされません。

num_precreate 子テーブルの作成遅延

テーブルで自動パーティショニングを初めて有効にした場合、作成タスクは直ちに実行されません。システムはデフォルトで 10 分ごとに作成対象のパーティションを確認します。そのため、システムはこの 10 分以内に子テーブルを作成します。