针对 Snowflake 管理的 Apache Iceberg™ v2 表的“带位置删除文件的读时合并”机制(待发布)

注意

此行为变更包含在 2026_03 捆绑包中。

有关捆绑包的当前状态,请参阅 捆绑包历史记录

变更前:

对于 Iceberg v2 规格的 Snowflake 管理型 Apache Iceberg™ 表,当您运行 DELETE、UPDATE 或 MERGE 语句时,Snowflake 不会为读时合并写入 位置删除文件 (https://iceberg.apache.org/spec/#position-delete-files)。Snowflake 在这些操作中会采用写时复制的方式进行处理。

变更后:

当您的账户启用 2026_03 行为变更包后,对于 Iceberg v2 规格的 Snowflake 管理型 Apache Iceberg™ 表,其 DELETE、UPDATE 和 MERGE 操作将默认采用“带位置删除文件的读时合并”机制,前提是 ENABLE_ICEBERG_MERGE_ON_READ 参数设置为 :code:`TRUE`(该参数为系统默认值)。Snowflake 会在表所在的 Iceberg 存储位置中,将位置删除文件与数据文件并排写入。这一行为与 Snowflake 在启用读时合并后处理“外部管理型 Iceberg v2 表”的方式保持一致。

若要对这些 DML 操作关闭读时合并,改用写时复制,请将 ENABLE_ICEBERG_MERGE_ON_READ 参数在表、架构或数据库级别设置为 FALSE。有关更多信息,请参阅 ENABLE_ICEBERG_MERGE_ON_READ

与外部查询引擎的兼容性

位置删除文件需要外部引擎中 Iceberg 格式版本的支持。如果您使用的外部查询引擎依赖于 v2 之前的 Iceberg 版本,则该引擎可能不支持位置删除文件,并且在 Snowflake 写入位置删除文件后,可能无法读取您 Snowflake 管理型 Iceberg v2 表的表元数据。

在变更在生产账户中生效之前,请执行以下操作:

  1. 请确认您用于读取 Snowflake 管理的 Apache Iceberg™ v2 表的每个外部查询引擎都支持 `位置删除文件 <https://iceberg.apache.org/spec/#position-delete-files (https://iceberg.apache.org/spec/#position-delete-files)>`_(即 Iceberg v2 或更高版本)。

  2. 如果有任何引擎不支持位置删除文件,请将该引擎升级到基于 Iceberg v2 或更高版本的发行版,或者为相关表(或包含该表的架构或数据库)将 ENABLE_ICEBERG_MERGE_ON_READ 设置为 FALSE,以便 Snowflake 继续使用写时复制,而不写入位置删除文件。

有关 Snowflake 中的位置删除文件、读时合并和相关参数的更多信息,请参阅 使用行级删除

参考:2279