您可以使用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。 |