Repository navigation
Collapse column-only metadata projections without losing IPC properties - #176
Merged
osipovartem merged 2 commits intoNov 3, 2026
Merged
osipovartem merged 2 commits into
osipovartem merged 2 commits into
Conversation
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.
Which issue does this PR close?
Performance follow-up for Rustice #1112; this does not close its downstream qualification gates.
Rationale for this change
Nested views can introduce adjacent column projections that change only output metadata. Existing metadata barriers retain the whole chain even though these expressions cannot inspect their input metadata. Remove the redundant execution layers without weakening barriers around computed expressions or changing observable Arrow IPC dictionary properties.
What changes are included in this PR?
No row-by-row conversion, new dependency, public API, or configuration option.
Are these changes tested?
Local qualification on rebased HEAD
841da53e0, based on95e77b795:cargo +1.97.0 fmt --all: passed.cargo +1.97.0 clippy --offline --locked --profile ci --all-targets --all-features -- -D warnings: passed.The rebase leaves the complete four-file patch and Cargo.lock byte-identical to the independently reviewed measured patch. No expected-result snapshots were adjusted.
Local performance screen
The independently reviewed frozen comparison is bc0b207 -> 901719559, before the later integration rebase. Rust 1.97,
release-nonlto, identical lockfile/benchmark and 267 dependency records; four alternating paired blocks with fresh processes, one-CPU affinity, and independent correctness preflights. All raw samples and adverse blocks were retained. This is a local physical-plan microbenchmark, not SQL/SPCS latency or a statistical equivalence claim.All six unchanged case/phase controls and both one-row override controls passed the predeclared gates: median cost ratio <= 1.03, at least three of four ratios <= 1.05, and no ratio > 1.10. The largest control median increase was 0.68%; the worst individual increase was 4.33%. These increases are reported, not discarded. Independent review recomputed all 48 ratios from 96 timed datasets / 960 samples.
The integration rebase leaves all four changed files and Cargo.lock byte-identical, but its dependencies were not timed again. A downstream Rustice repin and the actual view-query cost/wire screen remain separate acceptance gates.
To reconstruct the measured pair from public sources, start both arms at
bc0b2074b. Apply only this PR's benchmark file and Cargo registration to the baseline, and its complete four-file diff to the candidate (effective source tree419d9af484e77c3e3be177bdc6837ec36f109cd4). Runcargo bench --profile release-nonlto -p datafusion-physical-plan --bench projection_metadataon each arm with the same settings. The older local commit ID above identifies the frozen measurement, not the rebased PR HEAD.Are there any user-facing changes?
No public API changes. Metadata-only column projection chains can execute with fewer operators; output values, metadata, and IPC dictionary properties must remain unchanged.