Read Iceberg v2 position delete files in DataFusion scans - #412
Conversation
Convergence with #414 (v3 deletion vectors)#414 adds read support for v3 deletion vectors and, in doing so, introduces infrastructure this PR can reuse. Both features apply positional deletes keyed by What #414 provides that this PR can reuse
Proposed integration (after #414 merges)
What that reuses from this PR: the What it would replace: the Scope note: coexistence of equality + positional deletes in one partition would need the equality path to also emit the internal columns and wrap in Happy to help wire this up once #414 lands. |
|
Thanks, this convergence plan makes sense. I agree that v2 position-delete files and v3 deletion vectors should share the streaming bitmap-probe operator once #414 lands. I will keep this PR unchanged for now, then rebase it onto #414 and adapt the v2 loader while preserving the inclusive sequence rule, reserved field IDs, and collision-free internal column names. Equality/position-delete coexistence can remain an explicit follow-up. |
edc6a77 to
bc4ce9d
Compare
bc4ce9d to
f854c8c
Compare
|
Looks great! Thanks a lot |
Summary
datafusion_icebergscansContent::PositionDeletesbycontent_offset: v3 Puffin deletion vectors keep the Read Iceberg v3 deletion vectors in DataFusion scans #414 loader, while v2 Parquet delete files use a new streaming loaderIcebergDvExecdelete sequence >= data sequence, including equality)This implements the v2 read side described by the Iceberg delete files specification and converges it with the v3 deletion-vector path introduced by #414. Equality and positional deletes in the same partition remain an explicit follow-up, matching #414's current behavior.
Performance
file_pathandposfields are projected by Iceberg field IDScalarValueconversionRowNumbervirtual columnValidation
cargo +1.95.0 test -p iceberg-rust table::position_delete::tests --libcargo +1.95.0 test -p iceberg-rust table::deletion_vector --libcargo +1.95.0 test -p datafusion_iceberg --test position_deletecargo +1.95.0 test -p datafusion_iceberg table::tests::row_number_virtual_column_drives_dv_filter_with_pushdown --libcargo +1.95.0 fmt --all -- --checkgit diff --checkThe integration test covers multiple v2 delete files, duplicate positions, field-ID-based projection with noncanonical column names, filtered reads, later appends, and collisions with internal metadata column names. Focused tests cover inclusive sequence semantics and the existing v3 DV path.