动态表的已知限制

本主题介绍对以下动态表功能的限制:

一般限制

使用动态表时存在以下一般限制:

  • 单个账户最多可容纳 4000 个动态表。

  • 在动态表的定义中:

    • 不能查询超过 100 个表。

    • 不能查询超过 100 个动态表。

  • 不能截断动态表中的数据。

  • 不能创建临时动态表。

  • 当您使用动态表 引入共享数据 时,查询不能从共享动态表或引用上游动态表的共享安全视图中选择。

  • 不能在动态表中使用次要角色,因为动态表的刷新会充当其所有者角色。有关更多信息,请参阅 具有主要角色和次要角色的执行模型

  • 您无法将源表中的 DATA_RETENTION_TIME_IN_DAYS 对象参数设置为零。

  • 您不能在动态表的定义中使用动态 SQL(例如,会话变量或匿名块的无绑定变量)。

  • 在动态表定义中,从用户定义的表函数 (UDTF) 读取的 SELECT 块必须明确指定列,并且不能使用 *

  • 如果动态表在输入表的 MAX_DATA_EXTENSION_TIME_IN_DAYS 时间段内未刷新,则可能会变得过时。一旦过时,必须重新创建动态表以恢复刷新。

  • 动态表目前不支持在 ACCESS_HISTORY 视图 中进行跟踪。这意味着对动态表执行的查询和操作不会被记录在 Snowflake 的 ACCESS_HISTORY 中,以用于审计或监控目的。

支持的数据类型

动态表支持所有 Snowflake SQL 数据类型,用于增量和完全刷新,但以下类型除外:

  • 结构化数据类型。

  • 地理空间数据类型(仅完全刷新)。

查询结构的限制

动态表的查询当前不支持以下结构。如果在查询中指定这些内容,则会发生错误:

  • 外部函数

  • 序列

  • 依赖 CURRENT_USER 的函数。动态表刷新由一个特殊 SYSTEM 用户作为其所有者角色。

  • 包含目录表、外部表、流和物化视图的源。

  • 动态表或其他不受支持的对象上的视图。

  • 用户定义的表函数 (UDTF) 用 SQL 编写。

  • 用户定义的函数 (UDF) 用 SQL 编写,其中包含子查询(例如,一个 SELECT 语句)。

  • 增量或完全刷新中不支持 PIVOTUNPIVOT 结构。

  • 动态表增量或完全刷新中不支持 SAMPLE / TABLESAMPLE 结构。

支持跨功能交互

不支持以下跨功能交互:

  • 使用 Query Acceleration Service (QAS) 进行动态表刷新。

  • 在共享表上使用数据库角色的掩码策略。

对增量刷新的支持

本部分介绍了 动态表增量刷新 目前不支持的表达式、子句和函数。如果查询使用了这些不受支持的对象,自动刷新过程将使用完全刷新,这可能会消耗更多的 Credit。请参阅 确定使用增量刷新还是完全刷新

增量刷新不支持非确定函数,但 完全刷新支持某些非确定函数

创建动态表 时,刷新模式的默认值是 AUTO,该值用于选择动态表的增量刷新。如果 CREATE DYNAMIC TABLE 语句不支持增量刷新,则系统会自动选择完全刷新作为刷新模式。

要确定最适合您用例的刷新模式,请尝试不同的刷新模式和自动建议。为了在 Snowflake 版本之间保持一致的行为,请在所有动态表上显式设置刷新模式。例如,如果您希望动态表仅增量刷新,则在创建它们时必须显式将刷新模式设置为 INCREMENTAL。有关更多信息,请参阅 设置所有生产动态表的刷新模式

要验证动态表的刷新模式,请参阅 查看动态表刷新模式

不支持的结构、运算符和函数

动态表目前不支持某些结构、运算符和函数的增量刷新。如果在查询中指定以下内容,动态表就会通过完全刷新进行更新:

  • 集运算符

    • UNION、MINUS、EXCEPT、INTERSECT。

  • UNION [ ALL ] 的以下使用情况:

    • 表和其自身或其自身克隆的 UNION ALL。

    • UNION ALL 在一个 GROUP BY 或 DISTINCT 与另一个 GROUP BY 或 DISTINCT 之间。

  • 所有 子查询运算符

  • 以下 外部联接 (左联接、右联接或全联接)模式:

    • 外部联接,联接双方位于同一表。

    • 外部联接,联接双方都具有 GROUP BY 子句的子查询。

    • 带有非相等谓词的外部联接。

  • 窗口函数 的以下使用情况:

    • 同一动态表定义中有多个窗口函数,其中 PARTITION BY 子句要么不是相同的,要么出现在不同的查询块中。

    • 使用带有滑动窗口框架的窗口函数 PERCENT_RANK、DENSE_RANK、RANK。

    • 使用 ANY_VALUE,因为它是一个非确定性函数。

  • 用户定义函数 (UDF) 的以下使用情况:

    • UDFs 和 UDTFs 由 Python、Java、Scala 或 Javascri 编写而成,并指定 VOLATILE 参数。

    • SQL UDFs 包含子查询。

  • LATERAL 联接,除了搭配使用 LATERAL 和 FLATTEN()

  • ML 或 LLM 函数

增量刷新的其他限制

掩码和行访问策略

动态表上的掩码或行访问策略不会影响其刷新模式。然而,应用于源表的策略可能会影响刷新模式:

  • 如果源表上的策略使用 CURRENT_ROLE 函数,则增量刷新受支持。

  • 如果源表上的策略使用任何其他函数、INFORMATION_SCHEMA 视图,或查询一个表(例如,映射表查找),则增量刷新不受支持。

复制

具有增量刷新的复制动态表在故障转移后重新初始化,然后才能恢复增量刷新。

有关更多信息,请参阅 复制和动态表

克隆

克隆的增量动态表 在创建后第一次刷新期间可能需要重新初始化。

如果一个动态表是从另一个包含已删除基表的动态表克隆的,则克隆将被暂停,无法恢复或刷新。

语言: 中文