动态表的已知限制¶
本主题介绍对以下动态表功能的限制:
一般限制¶
使用动态表时存在以下一般限制:
单个账户最多可容纳 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 语句)。
动态表增量或完全刷新中不支持 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()。
您无法从横向展平联接中选择展平 SEQ 列。有关更多信息,请参阅 增量刷新中支持的查询。
增量刷新的其他限制¶
掩码和行访问策略¶
动态表上的掩码或行访问策略不会影响其刷新模式。然而,应用于源表的策略可能会影响刷新模式:
如果源表上的策略使用 CURRENT_ROLE 函数,则增量刷新受支持。
如果源表上的策略使用任何其他函数、INFORMATION_SCHEMA 视图,或查询一个表(例如,映射表查找),则增量刷新不受支持。
复制¶
具有增量刷新的复制动态表在故障转移后重新初始化,然后才能恢复增量刷新。
有关更多信息,请参阅 复制和动态表。
克隆¶
克隆的增量动态表 在创建后第一次刷新期间可能需要重新初始化。
如果一个动态表是从另一个包含已删除基表的动态表克隆的,则克隆将被暂停,无法恢复或刷新。