feat: add position_deletes metadata table - #920
Draft
wirybeaver wants to merge 1 commit into
Draft
wirybeaver wants to merge 1 commit into
wirybeaver wants to merge 1 commit into
Conversation
wirybeaver
force-pushed
the
feature/position-deletes-metadata-table
branch
3 times, most recently
from
September 5, 2026 23:34
74edbb6 to
7965dcd
Compare
wirybeaver
force-pushed
the
feature/position-deletes-metadata-table
branch
from
October 1, 2026 19:57
7965dcd to
0a41688
Compare
Reuse one reader and projection context per scan. Append and decode decimal partitions as Decimal128, and encode Avro fixed decimals using their schema width rather than all 16 Arrow bytes. Preserve logical date storage values and cover the complete partition write/read path.
wirybeaver
force-pushed
the
feature/position-deletes-metadata-table
branch
from
October 1, 2026 21:45
0a41688 to
2e7240e
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Add general
position_deletesmetadata inspection for Parquet delete files and Puffin DVs, independent of the high-level delete-update API.preserve stored row payloads, subset-row nulls, and partition evolution with collision-free metadata field IDs
support mixed upgraded tables, multi-blob DVs, empty scans, and complete top-level projections
adapt to the current metadata-table
ArrowArrayStreamAPI, emitting bounded batchesdetect optional physical Parquet row fields through a reader schema-presence query, not error-message matching
construct and validate projection state once per scan, reusing it across batches; open each position-delete file once while still distinguishing absent row columns from invalid null rows
fix decimal partition appending/decoding and honor precision-dependent Avro fixed widths in both encoder paths; preserve logical date values represented by primitive storage literals
DV-PR-3 in #916. Based directly on
mainat3c5715c; no dependency on #913, #914, or #915. Reuse the existing range-based DV reader without full footer cross-validation.Test plan
GCC 14 focused checks on the four-feature integration tree based on
3c5715c; the final changed branch sources were verified to match the tested tree.position_deletes_table_test: 19 passedmanifest_test --gtest_filter='*ManifestWriter*:*ManifestReader*': 72 passed, 7 version-specific skipsavro_test --gtest_filter='*Decimal*': 6 passeddata_test --gtest_filter='ArrowRowBuilderTest.*': 8 passedCoverage includes decimal/date partition write/read, schema-sized signed decimal encoding, reordered projection across multiple batches, optional/subset stored rows, and empty/stale-layout scans.
git diff --check: passedDeliberate limits
Results are materialized before returning the stream; bounded batches are not a claim of lazy or memory-bounded input scanning. Nested projection such as
row.idremains outside this feature and is rejected explicitly.Recreate the inspector after source schema/format/partition-spec changes; scans reject a stale layout rather than mixing schemas.