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

Hologres:ダイナミックテーブルのサポートと制限

最終更新日:Sep 03, 2026

ダイナミックテーブルを使用して、効率的でコスト効率の高い、自動化されたデータパイプラインと階層を構築できます。このトピックでは、ダイナミックテーブルのサポートと制限について説明します。

増分リフレッシュ

増分リフレッシュモードのダイナミックテーブルには、以下の機能と制限があります。

制限事項

  • リソース使用量

    Hologres V3.1 以降、新しいテーブルはデフォルトでサーバーレスリソースを使用してリフレッシュタスクを実行します。インスタンスでサーバーレスリソースが有効になっていない場合、自動的にローカルリソースに切り替わります。Hologres V3.0 で作成されたテーブルは、元々指定されていたリソースを引き続き使用し、自動的にサーバーレスリソースに切り替わることはありません。

  • ベーステーブルの制限

    • ベーステーブルとしてサポートされているのは、Hologres 内部テーブル、Paimon 外部テーブル、および他のダイナミックテーブルのみです。ダイナミックテーブルを作成するには、ベーステーブルに対する SELECT 権限が必要です。

    • デフォルトでは、Hologres V3.1 はストリームメソッドを使用してベーステーブルのデータを増分的に消費します。Binlog メソッドと比較して、ストリームメソッドはパフォーマンスが向上し、追加のストレージコストは発生しません。V3.1 より前にベーステーブルで Binlog メソッドを使用していた場合は、追加のストレージ消費を防ぐために、速やかに Binlog を無効にすることを推奨します。Binlog を無効にする方法については、「Hologres Binlogのサブスクライブ」をご参照ください。

    • Hologres V3.0 では、増分リフレッシュモードでダイナミックテーブルを作成する場合、ベーステーブルで Binlog を有効にする必要があります。ただし、ディメンションテーブルには必要ありません。Binlog の有効化に関する詳細については、「Hologres Binlogのサブスクライブ」をご参照ください。

  • クエリの制限

    • サポートされているシナリオ

      • 任意のスカラー式

      • WHERE 条件

      • サブクエリ

      • 共通テーブル式 (CTE)

      • GROUP BY

      • CUBE

      • GROUPING SETS

      • HAVING 句

      • 集計フィルター

      • UNION ALL

      • UNNEST

    • ウィンドウ関数:以下の関数のみがサポートされています。dense_rank、first_value、last_value、および SUM や COUNT などの集計ウィンドウ関数など、他のすべてのウィンドウ関数はサポートされていません。

      • row_number と rank:Hologres V4.2 以降でサポートされています。クエリでは、外部クエリに TopN フィルター (WHERE rownum <= N) を含め、PARTITION BY と ORDER BY の両方を指定する必要があります。

      • lead と lag:Hologres V5.0 以降でサポートされています。PARTITION BY と ORDER BY の両方を指定する必要があり、単一引数形式の lead(expr) と lag(expr) のみがサポートされています。

      • 通常、1 つのウィンドウ定義では 1 つのウィンドウ関数しかサポートされません。lead と lag は例外で、両方を同じウィンドウ定義内で使用できます。

      • 詳細な構文と制限については、「増分リフレッシュでサポートされる関数」をご参照ください。

    • サポートされていないシナリオ

      • IN サブクエリ

      • EXISTS または NOT EXISTS

      • EXCEPT または INTERSECT

      • ORDER BY

      • LIMIT または OFFSET

    • 複数テーブル結合:

      • Hologres V3.0 は、ディメンションテーブルでの等価結合 (INNER JOIN または LEFT JOIN) のみをサポートしており、これらの結合では FOR SYSTEM_TIME AS OF PROCTIME() 構文を使用する必要があります。複数テーブルのダブルストリーム結合はサポートされていません。詳細については、「ルックアップ結合ステートメント」をご参照ください。

        説明

        ルックアップ結合は、各レコードを処理時間時点のディメンションテーブルデータの最新バージョンに関連付けます。結合後にディメンションテーブルのデータが変更されても、以前に結合されたデータは更新されません。

      • Hologres V3.0.26 以降、複数テーブルのダブルストリーム結合がサポートされています。これらは、標準の OLAP 結合や Flink のダブルストリーム結合に相当し、INNER JOIN および LEFT/RIGHT/FULL OUTER JOIN が含まれます。詳細については、「CREATE DYNAMIC TABLE」をご参照ください。

    • 関数:COUNT、SUM、MIN/MAX、COUNT DISTINCT などの集計関数はサポートされています。パラレルクエリエンジン (PQE) で実行される関数はサポートされていません。以下の表に、サポートされているその他の関数を示します。

      関数

      構文

      例

      サポートバージョン

      RB_BUILD_AGG

      RB_BUILD_AGG(<column>)
      説明

      column パラメーターは INT32 と INT64 データ型をサポートしています。詳細については、「RoaringBitmap関数」をご参照ください。

      CREATE DYNAMIC TABLE daily_uv PARTITION BY list (day) 
        WITH (
          freshness = '5 minutes', 
          refresh_mode = 'incremental') 
        AS 
        SELECT day,
               game_id,
               gameversion,
               RB_BUILD_AGG(user_id) AS user_rb
          FROM base_table GROUP BY day, game_id, gameversion;

      V3.1 以降

      STRING_AGG

      STRING_AGG([DISTINCT] column_expr, const_expr)
      説明
      • データ型:column_expr は TEXT、CHAR、または VARCHAR である必要があります。const_expr は TEXT 定数である必要があります。

      • ORDER BY 句はサポートされていません。

      • Hologres V3.1.10 以降、STRING_AGG([DISTINCT] がサポートされています。

      CREATE DYNAMIC TABLE string_agg_test_dt  
        WITH (
          freshness = '3 minutes', 
          refresh_mode = 'incremental') 
        AS 
        SELECT day,
               STRING_AGG(gameversion, ',') AS gameversion_list
          FROM base_table GROUP BY day;
      • V3.1 以降

      • V3.1.10 以降、STRING_AGG([DISTINCT] がサポートされています。

      ARRAY_AGG

      ARRAY_AGG([DISTINCT] expr)
      説明
      • データ型:expr パラメーターは BOOL、すべての数値型、TEXT、および BYTEA をサポートしています。

      • ORDER BY 句はサポートされていません。

      • Hologres V3.1.10 以降、ARRAY_AGG([DISTINCT] がサポートされています。

      CREATE DYNAMIC TABLE array_agg_test_dt  
        WITH (
          freshness = '3 minutes', 
          refresh_mode = 'incremental') 
        AS 
        SELECT day,
               ARRAY_AGG(gameversion) AS gameversion_list
          FROM base_table GROUP BY day;
      • V3.1 以降

      • V3.1.10 以降、ARRAY_AGG([DISTINCT] がサポートされています。

      ANY_VALUE

      GROUP BY 句を含む集計クエリでは、この関数は各グループ内のいずれかの行から非決定的に値を返します。

      ANY_VALUE(expr)

      ANY_VALUE 関数は INT と BINARY データ型のみを受け入れます。

      CREATE DYNAMIC TABLE dt_t0
      WITH (
        -- ダイナミックテーブルのプロパティ
        freshness = '1 minutes', 
        auto_refresh_mode = 'auto'
      )
      AS 
      SELECT a, any_value(c), SUM(b) FROM t0 GROUP BY a;

      V3.1.5 以降

    • Hologres V3.1 以降、ダイナミックテーブルを論理パーティションとして設定できます。関連するパーティションのプロパティと管理設定もサポートされています。

フルリフレッシュ

フルリフレッシュモードのダイナミックテーブルには、以下の機能と制限があります。

サポートされている機能

  • ベーステーブル:機能は標準の Hologres テーブルと同じです。MaxCompute、Data Lake Formation (DLF)、Paimon などの Hologres 内部テーブルや外部テーブルをベーステーブルとして使用できます。ダイナミックテーブルを作成するには、ベーステーブルに対する必要な権限が必要です。詳細については、「ダイナミックテーブルの権限」をご参照ください。

  • クエリ:Hologres で現在サポートされているすべての関数、SQL 式、データ型は、フルリフレッシュモードでもサポートされています。

  • リフレッシュリソース:デフォルトでは、リフレッシュタスクはサーバーレスリソースを使用します。現在のインスタンスのリソースを使用するようにタスクを設定することもできます。

制限事項

  • リフレッシュモードをフルリフレッシュから増分リフレッシュに変更することはできません。

  • Hologres V3.0 では、フルリフレッシュモードのダイナミックテーブル上にビューを作成すると、ダイナミックテーブルのリフレッシュプロセスが失敗します。この問題は V3.1 以降のバージョンで解決されています。インスタンスをアップグレードすることを推奨します。

一般的な制限

ダイナミックテーブルの制限

  • Hologres インスタンスは V3.0 以降である必要があります。

  • テーブルプロパティの制限:プライマリキーやデフォルトのフィールド値を設定することはできません。エンジンはテーブルのインデックスを自動的に推測しますが、ビジネス要件に基づいて手動で設定することもできます。

  • フルリフレッシュモードと増分リフレッシュモードのみがサポートされています。サポートされている機能と制限はモードによって異なります。詳細については、「フルリフレッシュ」と「増分リフレッシュ」をご参照ください。

  • カスケードリフレッシュ (freshness = 'upstream') には以下の制限があり、これはフルリフレッシュと増分リフレッシュの両方に適用されます:

    • Hologres V5.0 以降でのみサポートされています。

    • freshness = 'upstream' を設定する場合、ベーステーブルの少なくとも 1 つはダイナミックテーブルである必要があります。

    • カスケード依存関係はサイクルを構成できません。

    • アップストリームのリフレッシュが失敗した場合、ダウンストリームのリフレッシュはトリガーされません。失敗はダウンストリームに伝播せず、ダウンストリームテーブルは最後に成功したリフレッシュのデータを保持します。

    • ダイナミックテーブルにダウンストリームの依存関係がある場合、そのテーブルに対する DROP は拒否されます。まずダウンストリームテーブルをドロップするか、依存関係を削除する必要があります。

    • 特定のダウンストリームテーブルに対して、一度に実行されるカスケードリフレッシュは 1 つだけです。アップストリームのトリガーが頻繁すぎる場合、中間のラウンドはスキップされ、ダウンストリームテーブルの実質的な更新間隔は、自身の 1 回のリフレッシュ期間とアップストリームのトリガー間隔のいずれか大きい方の値と等しくなります。

DDLおよびDML操作の制限

操作

サポート状況

CREATE DYNAMIC TABLE

はい

RENAME DYNAMIC TABLE

はい

RENAME DYNAMIC TABLE column

はい

SELECT

はい

リフレッシュ

  • 非パーティションテーブルと子パーティションテーブルでサポートされています。

  • 親パーティションテーブルではサポートされていません。

DROP DYNAMIC TABLE

はい。テーブルにダウンストリームのカスケード依存関係がある場合は拒否されます。

DROP DYNAMIC TABLE column

いいえ

TRUNCATE DYNAMIC TABLE

いいえ

DML (INSERT/UPDATE/DELETE) DYNAMIC TABLE

いいえ

ADD column

いいえ

リシャーディング

いいえ

説明

ベーステーブルのリシャーディングはサポートされていません。

CREATE TABLE AS/LIKE

いいえ

権限要件

操作

必要な権限

CREATE DYNAMIC TABLE

  • CREATE TABLE 権限。

  • ベーステーブルに対する SELECT 権限。

ALTER DYNAMIC TABLE

  • CREATE TABLE 権限。

  • ベーステーブルに対する SELECT 権限。

DROP DYNAMIC TABLE

ダイナミックテーブルの所有者である必要があります。

SELECT DYNAMIC TABLE

ダイナミックテーブルに対する SELECT 権限。

REFRESH DYNAMIC TABLE

ダイナミックテーブルに対する DML 権限。

説明

親パーティションテーブルのリフレッシュはサポートされていません。

ダイナミックテーブルに対する権限付与に関する詳細については、「Hologres権限モデル」をご参照ください。

ベーステーブル操作の影響

ベーステーブル操作

影響

RENAME <basetable_name>

  • ダイナミックテーブルに対するクエリは正常に実行されます。

  • リフレッシュ操作は失敗します。

RENAME <column not used by the Dynamic Table>

  • ダイナミックテーブルに対するクエリは正常に実行されます。

  • リフレッシュ操作は正常に実行されます。

RENAME <column used by the Dynamic Table>

  • ダイナミックテーブルに対するクエリは正常に実行されます。

  • リフレッシュ操作は正常に実行されます。

DROP <basetable_name>

  • DROP 操作は失敗します。

  • ダイナミックテーブルに対するクエリは正常に実行されます。

DROP <basetable_name> CASCADE

ダイナミックテーブルもドロップされ、そのリフレッシュタスクはキャンセルされます。

DROP <column not used by the Dynamic Table>

  • ダイナミックテーブルに対するクエリは正常に実行されます。

  • リフレッシュ操作は正常に実行されます。

DROP <column used by the Dynamic Table>

DROP 操作は失敗します。

TRUNCATE <basetable_name>

  • ダイナミックテーブルがリフレッシュされる前にベーステーブルを切り捨てた場合、ダイナミックテーブルに対するクエリはデータを返します。

  • ダイナミックテーブルがリフレッシュされた後にベーステーブルを切り捨てても、ダイナミックテーブルに対するクエリはデータを返します。

INSERT/DELETE/UPDATE/UPSERT <basetable_name>

変更は、次のリフレッシュ後にダイナミックテーブルに反映されます。