您可以使用Dynamic Table實現更高效、低成本的數據自動流動與分層,本文為您介紹Dynamic Table的支持范圍與使用限制。
通用限制
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 | 否 |
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設置的是全量刷新模式,支持的功能和使用限制如下:
支持的功能
基表的支持:與普通Hologres表的功能相同,支持Hologres內部表、外部表(MaxCompute、DLF和Paimon等)作為Dynamic Table的基表,創建Dynamic Table時需要具備對應基表的訪問權限,詳情請參見Dynamic Table權限。
Query的支持:當前Hologres支持的函數、SQL表達式、數據類型等,全量刷新模式都能支持。
刷新資源的支持:默認使用Serverless資源執行刷新任務,您也可以調整為本實例資源。
使用限制
暫不支持自動創建分區。
不支持將全量刷新模式轉換為增量刷新模式。
增量刷新
如果Dynamic Table設置的是增量刷新模式,支持的功能和使用限制如下:
支持的功能
基表的支持:僅支持Hologres內部表、Paimon外部表和Dynamic Table,創建Dynamic Table時需要有對應基表的訪問權限。
Query的支持:
任意標量表達式。
WHERE條件。
GROUP BY、CUBE、GROUPING SETS和HAVING語句,支持的聚合函數:COUNT、SUM、MIN/MAX、COUNT DISTINCT。
Agg Filter。
子查詢、CTE。
UNION ALL/UNION。
UNNEST。
維表等值JOIN(INNER JOIN/LEFT JOIN),且必須使用
FOR SYSTEM_TIME AS OF PROCTIME()
的方式。
刷新資源的支持:默認使用Serverless資源執行刷新任務,可以調整為本實例資源。
支持將增量刷新轉換為全量刷新。
使用限制
基表的限制:創建增量Dynamic Table時,基表必須開啟Binlog,維表無需開啟。開啟Binlog的操作請參見訂閱Hologres Binlog。
Query的限制:
不支持非維表JOIN,即OLAP中的普通JOIN,或者Flink中的雙流JOIN。
說明維表JOIN的語義是:對每條數據,只會關聯當時維表的最新版本數據,即JOIN行為只發生在處理時間(Processing Time)。如果JOIN行為發生后,維表中的數據發生了變化(新增、更新或刪除),則已關聯的維表數據不會被同步更新。
不支持窗口函數。
不支持IN 子查詢。
不支持EXISTS或NOT EXISTS。
不支持EXCEPT或INTERSECT。
不支持ORDER BY。
不支持LIMIT或OFFSET。
不支持RoaringBitmap相關函數。
對于分區Dynamic Table,暫不支持自動創建分區。
基表操作對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。 |