Merge-on-read with positional delete files for Snowflake-managed Apache Iceberg™ v2 tables (Pending)¶
Attention
This behavior change is in the 2026_03 bundle.
For the current status of the bundle, refer to Bundle history.
- Before the change:
For Snowflake-managed Apache Iceberg™ tables at Iceberg v2, Snowflake doesn’t write positional delete files for merge-on-read when you run DELETE, UPDATE, or MERGE statements. Snowflake uses copy-on-write for those operations instead.
- After the change:
When the 2026_03 behavior change bundle is enabled in your account, Snowflake-managed Apache Iceberg™ tables at Iceberg v2 use merge-on-read with positional delete files by default for DELETE, UPDATE, and MERGE when
ENABLE_ICEBERG_MERGE_ON_READisTRUE, which is the system default. Snowflake writes positional delete files alongside your data files in the table’s Iceberg storage location. This behavior matches how Snowflake already uses positional delete files for externally managed Iceberg v2 tables when merge-on-read is enabled.To turn off merge-on-read and use copy-on-write for these DML operations instead, set the
ENABLE_ICEBERG_MERGE_ON_READparameter toFALSEat the table, schema, or database level. For more information, see ENABLE_ICEBERG_MERGE_ON_READ.Compatibility with external query engines
Positional delete files require support from the Iceberg format version in your external engine. If you use an external query engine that relies on a version of Iceberg before v2, that engine might not support positional delete files and might not be able to read the table metadata for your Snowflake-managed Iceberg v2 tables after Snowflake writes positional delete files.
Before the change takes effect in your production accounts, do the following:
Confirm that every external query engine you use to read Snowflake-managed Apache Iceberg™ v2 tables supports positional delete files (Iceberg v2 or later).
If any engine doesn’t support positional delete files, either upgrade that engine to a release based on Iceberg v2 or later, or set
ENABLE_ICEBERG_MERGE_ON_READtoFALSEfor the relevant tables (or containing schema or database) so Snowflake continues to use copy-on-write and doesn’t write positional delete files.
For more information about positional delete files, merge-on-read, and related parameters in Snowflake, see Use row-level deletes.
Ref: 2279