2022_07 捆绑包

本主题介绍当月的以下行为变更(如果有):

  • 已弃用的功能。

  • 已启用的捆绑包变更。

  • 已实现的其他非捆绑包变更。

如果您对这些变更有任何疑问,请联系 Snowflake 支持部门 (https://community.snowflake.com/s/article/How-To-Submit-a-Support-Case-in-Snowflake-Lodge)。

有关本月推出的新功能、增强功能和修复的详细信息,请参阅 2022 年 10 月

重要

除非另有说明,这些更改都位于 2022_07 捆绑包中,该捆绑包在 6.35 版本中默认启用。

本主题内容:

SQL 变更 – 命令和函数

数据库和架构:如果弃用或替换会导致策略和标签的悬空引用,则不允许弃用或替换策略和标签

针对表中的掩码策略、标签和受保护列,弃用或替换相关数据库/架构的操作行为已更改如下:

之前:

如果标签和策略位于同一架构中而表位于不同的架构中,当表中的受保护列存在于不同的架构/数据库中时,Snowflake 允许对包含标签和掩码策略的架构/数据库执行 DROP 和 REPLACE 操作。

该行为适用于以下四个命令:

现在:

如果现在发生相同的情况,当表中的受保护列存在于不同的架构/数据库中时,Snowflake 不允许对包含标签和掩码策略的架构/数据库执行 DROP 和 REPLACE 操作。

因此,上面列出的四个命令的行为已更改。

例如:

  • 在名为 governance.tags 的架构中存在名为 t1 的标签和名为 p1 的掩码策略。

  • p1 掩码策略被分配给 t1 标签(即基于标签的掩码策略)。

  • t1 标签分配给名为 finance.accounting.customers 的表。

以前,Snowflake 允许在 governance.tags 架构上执行 DROP SCHEMA 操作,并允许在 governance 数据库上执行 DROP DATABASE 操作,同时将 t1 标签分配给 finance.accounting.customers 表。

现在,Snowflake 不允许在将 t1 标签分配给表时执行这两种操作。根据尝试的操作,Snowflake 会返回以下错误消息之一:

  • DROP DATABASE 和 CREATE OR REPLACE DATABASE:

    Cannot drop or replace database because: Tag governance.tags.tag1 used by schema finance.accounting in another database

  • DROP SCHEMA 和 CREATE OR REPLACE SCHEMA:

    Cannot drop or replace schema because: Tag governance.tags.tag1 used by another schema finance.accounting

CREATE MATERIALIZED VIEW 命令:不再允许 Time Travel 子句

物化视图的一个限制是不支持 Time Travel。但是,在运行 CREATE MATERIALIZED VIEW 命令时,可以为视图的基表指定 Time Travel 子句(例如 AT)。

现在,在 CREATE MATERIALIZED VIEW 中指定 Time Travel 子句会导致错误。

之前:

在 CREATE MATERIALIZED VIEW 中指定 Time Travel 子句不会产生错误。

例如,以下语句会成功执行,没有任何错误:

  • 示例 1:

    create or replace materialized view mv as select * from basetbl at(offset => -2);
    
    Copy
  • 示例 2:

    create or replace materialized view mv as select * from basetbl at(timestamp => $ts);
    
    Copy
  • 示例 3:

    create or replace materialized view mv as select * from basetbl at(statement => $uuid_dml);
    
    Copy
现在:

现在,在 CREATE MATERIALIZED VIEW 中指定 Time Travel 子句会产生以下错误:

002274 (42601): SQL compilation error: Invalid materialized view: Time travel on base table in line X at position Y.

SQL 变更 – 使用情况视图和 Information Schema 视图/表函数

GRANT_TO_ROLES 视图 (Account Usage):对视图的更改

ACCOUNT_USAGE.GRANTS_TO_ROLES 视图引入了以下变更。

之前:

视图的输出包括临时表中角色的权限授予。

现在:

视图的输出不包括临时表中角色的权限授予。

数据湖变更

CREATE EXTERNAL TABLE 命令:用户指定分区和自动刷新元数据

将外部表中的分区定义为用户指定的分区意味着您可以选择性地添加和删除分区,而不是为外部存储位置中符合表达式的所有新文件自动添加分区。此分区类型可在创建外部表时通过包含 PARTITION_TYPE = USER_SPECIFIED 参数来指定。用户指定的分区不支持自动刷新外部表元数据。

在同时设置了 PARTITION_TYPE = USER_SPECIFIEDAUTO_REFRESH = TRUE 参数的情况下执行 CREATE EXTERNAL TABLE 语句时,行为已更改如下:

之前:

CREATE EXTERNAL TABLE 语句会成功执行,但从云存储接收到的外部表的任何事件通知(如“新对象”消息)都会产生错误。

现在:

CREATE EXTERNAL TABLE 语句会返回用户错误。

GET_DDL 函数:返回 Delta Lake 上外部表的 TABLE_FORMAT 参数

GET_DDL 函数的输入是引用 Delta Lake 表的外部表时,函数返回的 CREATE EXTERNAL TABLE 语句有如下变化:

之前:

该语句省略将外部表标识为引用 Delta Lake 表的 TABLE_FORMAT = DELTA 参数。

现在:

该语句包含 TABLE_FORMAT = DELTA 参数。

可扩展性变更

Snowpark for Python:添加无效包时提前返回错误

在 Python Snowpark 会话中添加 Python 包时,如果 Snowflake 不支持该包或其指定版本,用户会收到一条错误消息。

收到错误消息的时间已提前:

之前:

仅当用户尝试注册 UDF 或存储过程时,才会收到错误。

现在:

当使用 add_packages 添加 Python 包时,错误会更早发生。

例如,调用 "session.add_packages('numpy==21.21.21')" 会导致 "ValueError",因为包版本无效。

Snowpark for Scala 和 Snowpark for Java:对 DeleteResult、MergeResult 和 UpdateResult 中成员类型的更改:

在 Snowpark Scala 和 Java APIs 中,DeleteResultMergeResultUpdateResult 类提供了值成员和 getter 方法,用于返回已插入、更新和删除的行数:

  • 在 Snowpark Scala API 中,这些值成员被命名为:

    • rowsInserted

    • multiJoinedRowsUpdated

    • rowsUpdated

    • rowsDeleted

  • 在 Snowpark Java API中,这些 getter 方法被命名为:

    • getRowsInserted

    • getMultiJoinedRowsUpdated

    • getRowsUpdated

    • getRowsDeleted

在 Snowpark Library for Scala 和 Snowpark Library for Java 的 1.7.0 版本中,这些值成员的类型以及这些 getter 方法的返回类型发生了变化:

1.7.0 之前的版本:
  • 在 Scala API 中,类型为 Int

  • 在 Java API 中,类型为 int

从 1.7.0 开始:
  • 在 Scala API 中,类型为 Long

  • 在 Java API 中,类型为 long

语言: 中文