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

Hologres:ALTER DYNAMIC TABLE

最終更新日:Nov 29, 2025

動的テーブルのプロパティを変更できます。このトピックでは、ALTER DYNAMIC TABLE 文の使用方法について説明します。

リフレッシュタスクの変更

リフレッシュタスクの一時停止

タスクを一時停止すると、そのテーブルの後続のすべての更新タスクの実行が停止します。

-- auto_refresh_enable: 自動更新を有効にするかどうかを指定します。false: 自動更新を一時停止します。
ALTER DYNAMIC TABLE [IF EXISTS] [<schema_name>.]<table_name> SET (auto_refresh_enable = false);

リフレッシュタスクの再開

一時停止した更新タスクを再開できます。タスクを再開すると、テーブルの元の更新設定に基づいて実行が再開されます。

-- auto_refresh_enable: 自動更新を有効にするかどうかを指定します。true: 自動更新を有効にします。
ALTER DYNAMIC TABLE [IF EXISTS] [<schema_name>.]<table_name> SET (auto_refresh_enable = true);

更新のフレッシュネス時間の変更

鮮度時間を変更できます。最小値は 1 分です。変更はすぐに有効になります。

説明

V3.1 構文を使用して作成された動的テーブルのみがこのパラメーターをサポートします。

ALTER DYNAMIC TABLE [ IF EXISTS ] [<schema_name>.]<table_name> SET (freshness='<num> {minutes | hours}');

更新の計算リソースと仕様の変更

更新の計算リソースを変更できます。ローカルインスタンスリソース (local) またはサーバーレスリソース (serverless) のいずれかを選択できます。サーバーレスリソースを選択した場合、計算仕様も変更できます。必要に応じて更新の仕様を増減できます。ただし、インスタンスが使用できる仕様には制限があります。詳細については、「Serverless Computing ガイド」をご参照ください。

説明
  • Hologres V4.0.7 以降のみが `warehouse_name` の明示的な指定をサポートします。

V4.0.7 以降

-- 更新の計算リソースを変更します。ローカル実行またはサーバーレス実行を選択できます。
ALTER [DYNAMIC] TABLE [ IF EXISTS ] [<schema>.]<table_name> SET (['local' | 'serverless' | '<warehouse_name>'])

-- サーバーレス実行の計算仕様を変更します。
ALTER DYNAMIC TABLE [ IF EXISTS ] [<schema>.]<table_name> SET (auto_refresh_guc_hg_experimental_serverless_computing_required_cores='<num>')

V3.1

-- 更新の計算リソースを変更します。ローカル実行またはサーバーレス実行を選択できます。
ALTER DYNAMIC TABLE [ IF EXISTS ] [<schema_name>.]<table_name> 
SET (computing_resource ='[local|serverless]');

-- サーバーレス実行の計算仕様を変更します。
ALTER DYNAMIC TABLE [ IF EXISTS ] [<schema_name>.]<table_name> 
SET (refresh_guc_hg_experimental_serverless_computing_required_cores='<num>');

V3.0

-- 単一テーブルの更新リソースを変更します。
ALTER DYNAMIC TABLE [ IF EXISTS ] [<schema_name>.]<table_name> 
SET (<incremental/full>_guc_hg_computing_resource ='[local|serverless]');

-- サーバーレスモードの場合、サーバーレスの計算仕様も変更できます。
ALTER DYNAMIC TABLE [ IF EXISTS ] [<schema_name>.]<table_name> 
SET (<incremental/full>_guc_hg_experimental_serverless_computing_required_cores='<num>');

リフレッシュモードの変更

V3.1 以降、更新モードを変更するためのオプションが増えました:

  • 更新モードを増分更新から完全更新に変更します。これは V3.0 以降でサポートされています。

  • 更新モードを自動更新から完全更新に変更します。これは V3.1 以降でサポートされています。

重要
  • モードを完全更新に変更すると、元の増分更新タスクは停止します。必要に応じて、更新タスクに関連するプロパティを再設定する必要があります。

  • システムは増分更新の状態テーブルを自動的にクリーンアップし、ストレージ使用量を削減します。

  • 論理パーティションを持つ動的テーブルの場合、変更は将来のパーティションにのみ有効です。非パーティションテーブルの場合、変更はすぐに有効になります。

V3.1 構文

ALTER DYNAMIC TABLE <schema_name>.<table_name> SET (auto_refresh_mode = '<full/auto>');

V3.0 構文

ALTER DYNAMIC TABLE <schema_name>.<table_name> SET (refresh_mode = 'full');

アクティブパーティションの時間範囲の変更

動的テーブルに論理パーティションがある場合、アクティブパーティションの時間範囲を変更して、自動更新の範囲を調整できます。

説明
  • この機能は V3.1 以降でのみサポートされています。

  • この変更は将来のパーティションにのみ有効です。既存のパーティションは影響を受けません。

-- auto_refresh_partition_active_time: 自動更新の時間範囲。この変更は将来のパーティションにのみ有効です。
ALTER DYNAMIC TABLE [IF EXISTS] [<schema_name>.]<table_name> SET (auto_refresh_partition_active_time = '<num> {minutes | hours | days}');

クエリ定義の変更と列の追加

V3.1 構文

Hologres V3.1.18 以降、動的テーブルのクエリ定義を変更し、クエリに列を追加することで動的テーブルに列を追加できます。

ALTER DYNAMIC TABLE [ IF EXISTS ] [<schema_name>.]<table_name> 
AS
<query>; -- 新しいクエリ定義。
  • 注意事項:

    • 新しいクエリ定義は、次の要件を満たす必要があります:

      • 新しいクエリによって生成される動的テーブルは、元のクエリによって生成される動的テーブルと互換性のあるテーブルスキーマを持つ必要があります。これには、次の要件が含まれます:

        • 両方のテーブルは、パーティションテーブルまたは非パーティションテーブルである必要があります。

        • 両方のテーブルのプライマリキー (PK) は同じである必要があります。

        • 両方のテーブルの分散キーは同じである必要があります。分散キーは変更できません。

        • 両方のテーブルのパーティションキーは同じである必要があります。パーティションキーは変更できません。

        • 両方のテーブルのクラスタリングキー、セグメントキー、ストレージモード (列ストアや行列ハイブリッドストアなど)、辞書エンコーディング、ビットマップインデックスは同じである必要があります。

        • 両方のテーブルのフィールド名は同じである必要があります。フィールド名は変更できません。

        • 同じ名前のフィールドは、同じデータ型と NULLABLE プロパティを持つ必要があります。

      • クエリでは列の追加のみが可能で、列の削除はできません。列を追加すると、既存のデータは変更されません。新しい列にはデフォルトで NULL 値が入力されます。データは次回の更新後に更新されます。

    • クエリ定義を変更した後、リフレッシュの動作は次のようになります:

      • 非パーティション化動的テーブル: 次のリフレッシュ (自動リフレッシュまたは手動リフレッシュ) は、リフレッシュ上書きをトリガーします。

      • 論理パーティションを持つ動的テーブル:アクティブパーティションは、次回の自動更新中に自動的に Refresh Overwrite をトリガーします。履歴パーティションには手動更新が必要です。

      クエリ定義を変更した後、クエリに増分更新でサポートされていない演算子が含まれている場合、リフレッシュの動作は次のようになります:

      リフレッシュモード

      新しいクエリ定義が増分更新をサポート

      新しいクエリ定義が増分更新をサポートしない

      auto_refresh_mode = 'auto'

      テーブル作成時に指定された refresh_mode が保持されます。

      refresh_mode は自動的に完全更新に変更されます。

      auto_refresh_mode = 'incremental'

      増分更新が保持されます。

      リフレッシュは失敗します。手動でモードを完全更新に変更する必要があります。

      auto_refresh_mode = 'full'

      完全更新が保持されます。

      完全更新が保持されます。

    1. サンプルデータを準備します。

      -- ソーステーブルを準備します。
      CREATE TABLE employees (
          department_id INT,
          employee_name VARCHAR
      );
      -- データを挿入します。
      INSERT INTO employees (department_id, employee_name) VALUES
      (1, 'John'),
      (1, 'Jane'),
      (1, 'John'),  -- 重複値
      (2, 'Alice'),
      (2, 'Bob'),
      (2, 'Alice'); -- 重複値
      
      -- 動的テーブルを作成します。
      CREATE  DYNAMIC TABLE dt_employees
      WITH (
        -- 動的テーブルのプロパティ
        freshness = '1 minutes', 
        auto_refresh_mode = 'auto',
        distribution_key = 'department_id'
      )
      AS 
      SELECT
          department_id
      FROM employees   
      GROUP BY department_id;
      
      -- 動的テーブルのデータをクエリします。
      SELECT * FROM dt_employees;
    2. 動的テーブルに列を追加します。

      -- 列を追加します。
      ALTER DYNAMIC TABLE dt_employees
      AS 
      SELECT
          department_id,
         STRING_AGG(DISTINCT employee_name, ', ') AS unique_employees
      FROM employees   
      GROUP BY department_id;
      

      文が正常に実行された後、動的テーブルのデータをクエリできます。新しい列のデータは NULL です。

      department_id	|unique_employees
      -----------|--------
      1	|\N
      2	|\N

      次回の更新が成功すると、新しい列のデータが更新されます。

      department_id	|unique_employees
      -------------|---------
      1	|Jane, John
      2 |	Bob, Alice

V3.0 構文

Hologres V3.0 はクエリ定義の変更をサポートしています。構文は次のとおりです。現在、完全更新モードでの変更のみがサポートされており、増分更新モードでの変更はサポートされていません。

説明
  • クエリ定義の変更は、テーブルのクエリ定義のみを変更し、元のフィールド名やフィールドプロパティは変更しません。

  • クエリ定義を変更する際は注意が必要です。新しいクエリのフィールドが元のフィールドと一致しない場合、更新エラーやデータ不整合などの問題が発生する可能性があります。

ALTER DYNAMIC TABLE [IF EXISTS] [<schema>.]<table_name> SET (task_definition = $$<new_query>$$); 
説明

ALTER DYNAMIC TABLE 文を使用して動的テーブルを更新する際、文字列が単一引用符 ('') で囲まれている場合、HG_DUMP_SCRIPT 関数で取得した動的テーブルのデータ定義言語 (DDL) が HoloWeb に表示される DDL と一致しなくなります。これは、PostgreSQL が入力文字列を識別子として認識し、TRUNCATE を使用して 128 文字に切り捨てるために発生します。したがって、単一引用符 ('') を $$ XXX $$ に置き換える必要があります。

リフレッシュ開始時刻の変更

更新開始時刻を変更できます。将来の指定した時刻にのみ変更できます。V3.0 で作成された動的テーブルのみがこの構文をサポートします。

-- 完全自動更新の開始時刻を変更します。
ALTER DYNAMIC TABLE [IF EXISTS] [<schema_name>.]<table_name> SET (<incremental/full>_auto_refresh_schd_start_time = '<timestamptz>');

更新間隔の変更

動的テーブルの更新間隔を変更できます。更新タスクは新しい間隔で実行されます。V3.0 で作成された動的テーブルのみがこの構文をサポートします。

-- 更新間隔 full_auto_refresh_interval を変更します。たとえば、「3 minutes」は 3 分の間隔を指定します。
ALTER DYNAMIC TABLE [IF EXISTS] [<schema_name>.]<table_name> SET (<incremental/full>_auto_refresh_interval = '[<num> { minutes | hours}]');

動的テーブルのプロパティの変更

動的テーブルの以下のプロパティを変更できます。記載されていないプロパティはサポートされていません。詳細については、「ALTER TABLE」をご参照ください。

説明

Hologres V3.1.20 以降は ALTER DYNAMIC TABLE RENAMEALTER DYNAMIC TABLE SET SCHEMA をサポートします。Hologres V3.1.20 より前のバージョンは ALTER TABLE RENAMEALTER TABLE SET SCHEMA をサポートします。

-- テーブル名を変更します。Hologres V3.1.20 以降は ALTER DYNAMIC TABLE RENAME をサポートします。
ALTER DYNAMIC TABLE [IF EXISTS] <table_name> RENAME TO <new_name>;

-- 辞書を変更します。
ALTER DYNAMIC TABLE [<schema_name>].<table_name> SET (dictionary_encoding_columns = '[columnName{:[on|off|auto]}[,...]]'); 

-- ビットマップを変更します。
ALTER DYNAMIC TABLE [<schema_name>].<table_name> SET (bitmap_columns = '[columnName{:[on|off]}[,...]]');

-- TTL を変更します。
ALTER DYNAMIC TABLE [<schema_name>].<table_name> SET (time_to_live_in_seconds = 'num');

-- スキーマを変更します。
ALTER DYNAMIC TABLE [IF EXISTS] [<schema_name>.]<table_name> SET SCHEMA <new_schema>;