全部產品
Search
文件中心

Hologres:Dynamic Table支援範圍和限制

更新時間:Sep 03, 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。

    • 視窗函數:僅支援以下函數,其餘視窗函數(如 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)。

      • 同一個視窗定義通常僅支援一個視窗函數;lead 和 lag 除外,二者可以在同一視窗定義下同時使用。

      • 詳細文法與使用限制,請參見增量重新整理函數支援記錄。

    • 不支援的情境

      • 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資源執行重新整理任務,您也可以調整為本執行個體資源。

使用限制

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

  • 在 Hologres V3.0 版本中,如果在全量重新整理的 Dynamic Table 上建立了 VIEW,會導致 Dynamic Table 重新整理失敗。建議升級至 V3.1 及以上版本,該問題已修複。

通用限制

Dynamic Table本身的限制

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

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

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

  • 級聯重新整理(freshness = 'upstream')的限制如下,全量重新整理和增量重新整理兩種模式均適用:

    • 僅Hologres V5.0及以上版本支援。

    • 設定freshness = 'upstream'時,基表中至少有一個必須是Dynamic Table。

    • 級聯依賴不允許成環。

    • 上遊重新整理失敗時不會觸發下遊重新整理,即失敗不向下傳播,下遊保持上一次成功重新整理的資料。

    • 當一個Dynamic Table存在下遊依賴時,DROP該表會被拒絕,需要先刪除下遊或解除依賴。

    • 同一個下遊同時最多隻有一個級聯重新整理在執行。上遊觸發過於密集時,中間輪次會被跳過,下遊實際的重新整理間隔等於自身單輪重新整理耗時與上遊觸發間隔中的較大者。

對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的授權,詳情請參見許可權模型介紹。

基表操作對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。