Dynamic Table支持范围和限制

您可以使用Dynamic Table实现更高效、低成本的数据自动流动与分层,本文为您介绍Dynamic Table的支持范围与使用限制。

通用限制

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

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设置的是全量刷新模式,支持的功能和使用限制如下:

支持的功能

  • 基表的支持:与普通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>

  • 查询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。