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

Hologres:動的パーティション

最終更新日:Oct 31, 2025

Hologres の動的パーティション機能は、パーティションテーブルの作成時に設定した動的パーティションルールに基づいて、子パーティションテーブルを自動的に作成および管理します。パーティションテーブルの作成時にすべてのパーティションを設定する必要はありません。動的パーティション機能は、指定された条件を満たすパーティションのデータを低頻度アクセス (IA) ストレージタイプのデバイスに移行することもできます。これにより、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 句は list partitioning のみをサポートします。パーティションキーは単一の列である必要があります。

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

  • 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',
       -- Hologres V2.2 以降は schd_start_time をサポート
       auto_partitioning_schd_start_time = 'xxx',
       -- Hologres V3.0.12 以降は time_format をサポート
       auto_partitioning_time_format = 'xxx'
    );
  • 既存のパーティションテーブルの動的パーティションプロパティを変更します。

    -- 既存のパーティションテーブルの動的パーティションプロパティを変更します。
    ALTER TABLE [<schema_name>.]<table_name> SET (
       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',
       -- Hologres V2.2 以降は schd_start_time をサポート
       auto_partitioning_schd_start_time = 'xxx',
       -- Hologres V3.0.12 以降は time_format をサポート
       auto_partitioning_time_format = '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_retention', 'xxx');
    CALL set_table_property('[<schema_name>.]<table_name>', 'auto_partitioning.num_hot', 'xxx');
    -- Hologres V2.2 以降は schd_start_time をサポート
    CALL set_table_property ('[<schema_name>.]<table_name>', 'auto_partitioning.schd_start_time', 'xxx');
    -- Hologres V3.0.12 以降は time_format をサポート
    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');
    -- Hologres V3.0.12 以降は time_format をサポート
    CALL set_table_property('[<schema_name>.]<table_name>', 'auto_partitioning.time_format', 'xxx');

パラメーター

重要

CREATE TABLE WITH 文を実行して動的パーティションを設定する前に、パラメーター名のピリオド (.) をアンダースコア (_) に置き換えます。たとえば、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 に設定すると、システムは日単位でパーティションを自動的に作成または削除します。

いいえ

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 年 1 月 10 日で、テーブルに time_unit = DAY, num_precreate = 3 を指定した場合、2022 年 1 月 10 日、1 月 11 日、1 月 12 日に対応するパーティションが事前に作成されます。

重要

パーティションの事前作成は、MAX_PT 関数の動作に影響します。このパラメーターを設定する前に、MAX_PT 関数が使用されているかどうかを確認してください。

はい

auto_partitioning_num_retention/auto_partitioning.num_retention

いいえ

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

  • 0: 履歴パーティションは保持されません。

  • -1: すべての履歴パーティションが保持されます。これがデフォルト値です。

  • 正の整数: 指定された数の履歴パーティションが保持されます。最大値は 512 です。

set hg_experimental_auto_part_max_maintained_partitions=<value>; 文を実行して、保持できる履歴パーティションの最大数を調整できます。最大値は 8760 です。

説明

たとえば、現在の日付が 2022 年 1 月 10 日で、テーブルに <time_unit = DAY,num_retention = 3> を指定した場合、2022 年 1 月 9 日、1 月 8 日、1 月 7 日に対応するパーティションが保持され、2022 年 1 月 7 日より前の日付に対応するパーティションは削除されます。

はい

auto_partitioning_num_hot/auto_partitioning.num_hot

いいえ

保持するホットパーティションの数。有効な値:

  • 0: ホットパーティションは保持されません。

  • -1: すべてのホットパーティションが保持されます。これがデフォルト値です。

  • 正の整数: 指定された数のホットパーティションが保持されます。最大値は 512 です。

Hologres V1.3.37 以降

auto_partitioning_schd_start_time/auto_partitioning.schd_start_time

いいえ

動的パーティションのスケジュールされた時間。このパラメーターを設定せず、auto_partitioning.time_unit パラメーターを HOUR に設定した場合、動的パーティションは各時間の開始時に実行されます。このパラメーターを設定せず、auto_partitioning.time_unit パラメーターを HOUR 以外の値に設定した場合、動的パーティションは特定の日付の 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 パラメーターは、HOUR、DAY、MONTH、QUARTER、または YEAR に設定できます。動的パーティション機能を使用して自動的に作成される子パーティションテーブルの名前は、その親パーティションテーブルの名前と時間接尾辞で構成され、{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

20241、20242、20243、20244 は 2024 年の 4 つの四半期を示します

各四半期の初日の 00:00:01、たとえば 2024 年 1 月 1 日 00:00:01

YYYY-Q

2024-1、2024-2、2024-3、2024-4 は 2024 年の 4 つの四半期を示します

YEAR

YYYY

2023 および 2024

毎年の初日の 00:00:01、たとえば 2023 年 1 月 1 日 00:00:01

次の SQL 文は、auto_partitioning.time_unit を DAY に設定して動的パーティションを設定する方法の例を示しています。この例では、Asia/Shanghai のタイムゾーンの現在の日付に基づいて、次の 3 日間のパーティションが作成され、前の 2 日間の履歴パーティションが保持されます。

WITH 句の使用

  1. tbl1 という名前のパーティションテーブルを作成します。

    -- Hologres V2.1 でパーティションテーブルを作成し、テーブルの動的パーティションを設定します。
    
    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_20231212、tbl1_20231213、tbl1_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 という名前の子パーティションテーブルが削除されます。

シナリオ

子パーティションテーブルの保持

デフォルトでは、システムは動的パーティションの設定に基づいて子パーティションテーブルを作成および削除します。子パーティションテーブルは、有効期限が切れると自動的に削除されます。重要な子パーティションテーブルのデータを保持したい場合があります。たとえば、前年比または期間比較分析を実行するために、独身の日 (Double 11) に生成された e コマースデータを保持したい場合があります。このようなシナリオでは、Hologres では、保持したい子パーティションテーブルに keep_alive プロパティを追加して、テーブルが自動的に削除されるのを防ぐことができます。

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

    -- 子パーティションテーブルに keep_alive プロパティを追加します。
    ALTER TABLE [<schema_name>.]<table_name> SET (keep_alive = 'true');
    
    -- 子パーティションテーブルから keep_alive プロパティを削除します。keep_alive プロパティを削除すると、テーブルの有効期限が切れた後に子パーティションテーブルは削除されます。
    ALTER TABLE [<schema_name>.]<table_name> SET (keep_alive = 'false');
    
  • すべての Hologres バージョンでサポートされている構文:

    -- 子パーティションテーブルに keep_alive プロパティを追加します。
    CALL set_table_property('[<schema_name>.]<table_name>', 'keep_alive', 'true');
    
    -- 子パーティションテーブルから keep_alive プロパティを削除します。keep_alive プロパティを削除すると、テーブルの有効期限が切れた後に子パーティションテーブルは削除されます。
    CALL set_table_property('[<schema_name>.]<table_name>', 'keep_alive', 'false');

パーティションテーブルのストレージモードの動的管理

パーティションテーブルのホットデータとコールドデータの階層型ストレージを有効にして、コストを削減し、クエリパフォーマンスを効率的に最適化できます。たとえば、頻繁にアクセスされる前の N 個の履歴パーティションのデータをホットストレージ層に格納し、N 個のパーティションより前に作成された M 個のパーティションのデータをコールドストレージ層に格納できます。これにより、ストレージコストを削減できます。M と N のパーティションより前に作成されたパーティションは動的に削除されます。

パーティションテーブルの作成と動的パーティションの設定

この例では、動的パーティションが設定されたパーティションテーブルが作成されます。毎日 1 つのパーティションが作成されます。前の 7 つの履歴パーティションのデータはホットストレージ層に格納され、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 パラメーターを使用して、ホットストレージ層のパーティション数を指定できます。コールドストレージ層からホットストレージ層にパーティションを移行することはできないことに注意してください。この例では、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;

パーティションストレージは、次のシナリオで変更される場合があります:

  • シナリオ 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');

    ホットストレージ層に格納されている子パーティションテーブルは、コールドストレージ層に移行されます。次の図に、設定の効果を示します。示例

コールドストレージモードを使用するパーティションテーブルを動的パーティションを持つパーティションテーブルに変換する

この例では、コールドストレージモードを使用するパーティションテーブルが、動的パーティションを含むパーティションテーブルに変換されます。過去 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

パーティション分割がスケジュールされている最も近い時点。

次の図に、クエリ結果を示します。

image

子パーティションテーブルの作成および削除ログのクエリ

子パーティションテーブルの作成および削除ログは、クエリログには含まれません。次の 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

削除された子パーティションテーブルの名前。

次の図に、クエリ結果を示します。

image

よくある質問

既存のパーティションテーブルで動的パーティションを有効にするにはどうすればよいですか?

次の 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 パラメーターは、動的パーティション機能のコアパラメーターです。Hologres インスタンスのスペックアップ後にパラメーターを一度だけ設定できます。その後、パラメーターの値を変更することはできません。

既存のパーティションテーブルで動的パーティションを有効にした場合、既存の子パーティションテーブルは自動的に削除されますか?

Hologres は、テーブル名に基づいて子パーティションテーブルを削除するかどうかを決定します。子パーティションテーブルの名前が {parent_table}_{time_suffix} の命名規則に従っている場合、子パーティションテーブルはテーブルの有効期限が切れた後に自動的に削除されます。それ以外の場合、子パーティションテーブルは自動的に削除されません。

SQL 文を実行してパーティションテーブルを作成し、num_precreate パラメーターを 3 に設定して動的パーティションを設定しました。しかし、親パーティションテーブルは作成されましたが、子パーティションテーブルは作成されませんでした。なぜですか?

デフォルトでは、Hologres は動的パーティションが設定されている新しいタスクを 10 分ごとにチェックします。子パーティションテーブルは 10 分以内に作成されます。後で子パーティションテーブルを確認できます。