Dynamic Table支援範圍和限制
您可以使用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資源執行重新整理任務,您也可以調整為本執行個體資源。
使用限制
-
不支援將全量重新整理模式轉換為增量重新整理模式。
-
在 Hologres V3.0 版本中,如果在全量重新整理的 Dynamic Table 上建立了 VIEW,會導致 Dynamic Table 重新整理失敗。建議升級至 V3.1 及以上版本,該問題已修複。
通用限制
Dynamic Table本身的限制
對Dynamic Table執行DDL、DML等操作的限制
|
操作 |
是否支援 |
|
CREATE DYNAMIC TABLE |
是 |
|
RENAME DYNAMIC TABLE |
是 |
|
RENAME DYNAMIC TABLE Column |
是 |
|
SELECT |
是 |
|
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 |
|
|
ALTER DYNAMIC TABLE |
|
|
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> |
|
|
RENAME <基表中Dynamic Table未使用的列名> |
|
|
RENAME <基表中Dynamic Table使用的列名> |
|
|
DROP <basetable_name> |
|
|
DROP <basetable_name> CASCADE |
Dynamic Table一併被刪除,任務也被取消。 |
|
DROP <基表中Dynamic Table未使用的列> |
|
|
DROP <基表中Dynamic Table使用的列> |
DROP報錯。 |
|
TRUNCATE <basetable_name> |
|
|
INSERT/DELETE/UPDATE/UPSERT <basetable_name> |
INSERT/DELETE/UPDATE/UPSERT Dynamic Table。 |