动态表的已知限制¶
本主题介绍对以下动态表功能的限制:
一般限制¶
使用动态表时存在以下一般限制:
单个账户最多可容纳 4000 个动态表。
在动态表的定义中:
不能查询超过 100 个表。
不能查询超过 100 个动态表。
不能截断动态表中的数据。
不能创建临时动态表。
当您使用动态表 引入共享数据 时,查询不能从共享动态表或引用上游动态表的共享安全视图中选择。
不能在动态表中使用次要角色,因为动态表的刷新会充当其所有者角色。有关更多信息,请参阅 具有主要角色和次要角色的执行模型。
查询结构的限制¶
动态表的查询当前不支持以下结构。如果在查询中指定这些内容,则会发生错误:
外部函数。
依赖 CURRENT_USER 的函数。动态表刷新由一个特殊 SYSTEM 用户作为其所有者角色。
包含目录表、Iceberg 表、External Tables、Streams 和物化视图的源。
动态表或其他不受支持的对象上的视图。
使用 SQL 编写并包含子查询的用户定义函数(UDFs 和 UDTFs)。
动态表增量或完全刷新中不支持 UNPIVOT 结构。
支持跨功能交互¶
不支持以下跨功能交互:
在动态表上设置群集密钥。
在动态表上启用搜索优化。
使用 Query Acceleration Service (QAS) 进行动态表刷新。
在托管访问架构中使用动态表。
以下限制适用于跨功能交互:
处于不同故障转移组的动态表和基表会导致复制失败。
对增量刷新的支持¶
本部分介绍了 动态表增量刷新 目前不支持的表达式、子句和函数。如果查询使用了这些不受支持的对象,自动刷新过程将使用完全刷新,这可能会消耗更多的 Credit。请参阅 确定使用增量刷新还是完全刷新。
增量刷新不支持非确定函数,但 完全刷新支持某些非确定函数。
如果希望动态表仅以增量方式刷新,则应在创建动态表时明确设置所需的刷新类型。有关更多信息,请参阅 设置所有生产动态表的刷新模式。
备注
启用 2024_04 行为变更捆绑包后,Snowflake 会根据您的查询定义选择可能表现最佳的刷新模式。
要确定适合您用例的最佳模式,请尝试不同的刷新模式和自动建议。要在不同的 Snowflake 版本中保持一致的行为,您应该在所有动态表上显式设置刷新模式。
当 创建动态表 时,REFRESH_MODE 的默认值是 AUTO
,该值用于选择动态表的增量刷新。如果 CREATE DYNAMIC TABLE 语句不支持增量刷新,则系统会自动选择完全刷新作为刷新模式。要验证动态表的刷新模式,请参阅 查看动态表刷新模式。
不支持的结构、运算符和函数¶
动态表目前不支持某些结构、运算符和函数的增量刷新。如果在查询中指定以下内容,动态表就会通过完全刷新进行更新:
集运算符:
UNION、MINUS、EXCEPT、INTERSECT。
UNION [ ALL ] 的以下使用情况:
表和其自身或其自身克隆的 UNION ALL。
两个 GROUP BYs 的 UNION ALL。
横向联接。
以下 外部联接 (左联接、右联接或全联接)模式:
外部联接,联接双方位于同一表。
外部联接,联接双方都具有 GROUP BY 子句的子查询。
带有非相等谓词的外部联接。
窗口函数 的以下使用情况:
同一动态表定义中有多个窗口函数,其中 PARTITION BY 子句要么不是相同的,要么出现在不同的查询块中。
使用带有滑动窗口的窗口函数 PERCENT_RANK、DENSE_RANK、RANK。
使用 ANY,因为它是一个非确定性函数。
用户定义函数 (UDF) 的以下使用情况:
UDFs 和 UDTFs 由 Python、Java、Scala 或 Javascri 编写而成,并指定 VOLATILE 参数。
UDFs 由 SQL 编写而成,并包含子查询或任何不支持的结构。
增量刷新的其他限制¶
- 掩码和行访问策略:
应用于动态表的掩码策略或行访问策略不会影响该动态表的刷新模式。在以下情况下,应用于源表的策略会影响动态表的刷新模式:
应用于源表的掩码策略或行访问策略使用 CURRENT_ROLE 函数,在这种情况下,动态表将使用增量刷新模式。
应用于源表的掩码策略或行访问策略使用任何其他函数或查询表(例如,映射表查询),在这种情况下,动态表将使用完全刷新模式。
- 复制:
具有增量刷新的复制动态表在故障转移后重新初始化,然后才能恢复增量刷新。
- 克隆:
在某些情况下,克隆的增量动态表 在创建后第一次刷新时可能需要重新初始化。