全部產品
Search
文件中心

Hologres:Dynamic Table支援範圍和限制

更新時間:Jan 15, 2026

您可以使用Dynamic Table實現更高效、低成本的資料自動流動與分層,本文為您介紹Dynamic Table的支援範圍與使用限制。

增量重新整理

如果Dynamic Table設定的是增量重新整理模式,支援的功能和使用限制如下:

使用限制

  • 資源使用說明

    V3.1版本開始,建立表預設使用serverless資源執行重新整理任務,如果該執行個體沒有開啟serverless,將會自動切換為local資源。V3.0版本中建立的表仍然使用表建立時設定的重新整理資源,不會預設變更為serverless。

  • 基表的限制

    • 僅支援Hologres內部表、Paimon外部表格和Dynamic Table,建立Dynamic Table時需要有對應基表的存取權限。

    • V3.1版本:預設使用Stream方式增量消費基表的資料,相比Binlog方式,Stream的效能更好,也沒有額外的儲存成本。如果您的基表在V3.1版本之前是使用Binlog方式,建議及時關閉Binlog,以防止增加額外的儲存。關閉Binlog操作見訂閱Hologres Binlog

    • V3.0版本:建立增量Dynamic Table時,基表必須開啟Binlog,維表無需開啟。開啟Binlog的操作請參見訂閱Hologres Binlog

  • Query的限制

    • 支援的情境

      • 任意標量運算式。

      • WHERE條件

      • 子查詢

      • CTE

      • GROUP BY

      • CUBE

      • GROUPING SETS

      • HAVING語句

      • Agg Filter

      • UNION ALL

      • UNNEST。

    • 不支援的情境

      • 視窗函數

      • IN子查詢

      • EXISTS或NOT EXISTS

      • EXCEPT或INTERSECT

      • ORDER BY

      • LIMIT或OFFSET

    • 多表JOIN:

      • V3.0版本僅支援維表等值JOIN(INNER JOIN/LEFT JOIN),且必須使用FOR SYSTEM_TIME AS OF PROCTIME()的方式。不支援多表雙流JOIN,詳情請參見維表JOIN語句

        說明

        維表JOIN的語義是:對每條資料,只會關聯當時維表的最新版本資料,即JOIN行為只發生在處理時間(Processing Time)。如果JOIN行為發生後,維表中的資料發生了變化(新增、更新或刪除),則已關聯的維表資料不會被同步更新。

      • 從V3.0.26版本開始,支援多表雙流JOIN,即OLAP中的普通JOIN,或者Flink中的雙流JOIN,包括INNER JOIN、LEFT/RIGHT/FULL OUTER JOIN。詳情請參見CREATE DYNAMIC TABLE

    • 函數:支援COUNT、SUM、MIN/MAX、COUNT DISTINCT等彙總函式。不支援使用PQE執行的函數。更多函數支援情況如下:

      函數名

      文法格式

      Dynamic Table使用樣本

      支援的版本

      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及以上版本。

      • 自Hologres V3.1.10版本開始,支援ARRAY_AGG([DISTINCT]

      ANY_VALUE

      在包含GROUP BY的彙總查詢中,從每個彙總分組中隨機播放某行的結果返回,結果不確定。

      ANY_VALUE(expr)

      ANY_VALUE的輸入參數僅支援INT和BINARY類型。

      CREATE  DYNAMIC TABLE dt_t0
      WITH (
        -- dynamic table的屬性
        freshness = '1 minutes', 
        auto_refresh_mode = 'auto'
      )
      AS 
      SELECT a,any_value(c),SUM(b) FROM t0 GROUP BY a;

      V3.1.5及以上版本支援。

    • 從V3.1版本開始,支援將Dynamic Table設定為邏輯分區,支援邏輯分區相關的分區屬性和分區管理設定。

全量重新整理

如果Dynamic Table設定的是全量重新整理模式,支援的功能和使用限制如下:

支援的功能

  • 基表的支援:與普通Hologres表的功能相同,支援Hologres內部表、外部表格(MaxCompute、DLF和Paimon等)作為Dynamic Table的基表,建立Dynamic Table時需要具備對應基表的存取權限,詳情請參見Dynamic Table許可權

  • Query的支援:當前Hologres支援的函數、SQL運算式、資料類型等,全量重新整理模式都能支援。

  • 重新整理資源的支援:預設使用Serverless資源執行重新整理任務,您也可以調整為本執行個體資源。

使用限制

不支援將全量重新整理模式轉換為增量重新整理模式。

通用限制

Dynamic Table本身的限制

  • Hologres執行個體必須為V3.0及以上版本。

  • Dynamic Table表屬性的限制:不支援設定主鍵、欄位預設值,引擎會自動推導表的索引,您也可以根據業務情況自行設定。

  • 僅支援全量重新整理和增量重新整理兩種模式,不同模式的支援範圍和使用限制不同,具體請參見全量重新整理增量重新整理

對Dynamic Table執行DDL、DML等操作的限制

操作

是否支援

CREATE DYNAMIC TABLE

RENAME DYNAMIC TABLE

RENAME DYNAMIC TABLE Column

SELECT

Refresh

  • 支援Refresh非分區表和分區子表。

  • 不支援Refresh分區父表。

DROP DYNAMIC TABLE

DROP DYNAMIC TABLE Column

TRUNCATE DYNAMIC TABLE

DML(INSERT/UPDATE/DELETE) DYNAMIC TABLE

ADD Column

Resharding

說明

不支援Base表Resharding

CREATE TABLE AS/LIKE

使用Dynamic Table的相關許可權要求

操作

許可權要求

CREATE DYNAMIC TABLE

  • Create Table許可權。

  • 基表的Select許可權。

ALTER DYNAMIC TABLE

  • Create Table許可權。

  • 基表的Select許可權。

DROP DYNAMIC TABLE

Dynamic Table的表Owner。

SELECT DYNAMIC TABLE

Dynamic Table的Select許可權。

REFRESH DYNAMIC TABLE

Dynamic Table的DML許可權。

說明

不支援Refresh分區父表。

對Dynamic Table的授權,詳情請參見Hologres許可權模型

基表操作對Dynamic Table的影響

基表操作

Dynamic Table的表現

RENAME <basetable_name>

  • 查詢Dynamic Table正常執行。

  • Refresh報錯。

RENAME <基表中Dynamic Table未使用的列名>

  • 查詢Dynamic Table正常執行。

  • Refresh正常執行。

RENAME <基表中Dynamic Table使用的列名>

  • 查詢Dynamic Table正常執行。

  • Refresh正常執行。

DROP <basetable_name>

  • DROP報錯。

  • Dynamic Table正常執行。

DROP <basetable_name> CASCADE

Dynamic Table一併被刪除,任務也被取消。

DROP <基表中Dynamic Table未使用的列>

  • 查詢Dynamic Table正常執行。

  • Refresh正常執行。

DROP <基表中Dynamic Table使用的列>

DROP報錯。

TRUNCATE <basetable_name>

  • 在Dynamic Table執行Refresh前TRUNCATE 基表,查詢Dynamic Table有資料。

  • 在Dynamic Table執行Refresh後TRUNCATE 基表,查詢Dynamic Table沒資料。

INSERT/DELETE/UPDATE/UPSERT <basetable_name>

INSERT/DELETE/UPDATE/UPSERT Dynamic Table。