Repository navigation
Emit projection pieces as separate batches - #10801
joseph-isaacs wants to merge 2 commits into
Conversation
|
The Generated by Claude Code |
ProjectionMorsel wrapped the pieces of a split in one ChunkedArray, which the Arrow export then concatenated, re-merging nested dictionaries. Emit pieces as separate batches in row order, grouping only pieces under 4,096 rows. Split out of #10761. Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SQocaYaDvJHfmorKXnyvJC
c4d97be to
c935c02
Compare
Merging this PR will improve performance by 36.12%3 warnings, 1 note
Performance Changes
Tip Curious why performance improved? Comment Comparing Footnotes
|
Polar Signals Profiling ResultsLatest Run
Previous Runs (6)
Powered by Polar Signals Cloud |
Benchmarks: PolarSignals Profiling 📖Commits: PR datafusion / vortex-file-compressed / ns (0.999x ➖, 0↑ 0↓)
No file size changes detected. |
Benchmarks: TPC-H SF=1 on NVME 📖Commits: PR How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (0.998x ➖, 0↑ 0↓)
datafusion / parquet / ns (1.000x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (0.998x ➖, 0↑ 0↓)
duckdb / parquet / ns (1.002x ➖, 0↑ 0↓)
No file size changes detected. |
Benchmarks: FineWeb NVMe 📖Commits: PR How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (1.017x ➖, 0↑ 0↓)
datafusion / parquet / ns (0.988x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (0.995x ➖, 0↑ 0↓)
duckdb / parquet / ns (1.009x ➖, 0↑ 0↓)
No file size changes detected. |
Benchmarks: TPC-H SF=10 on NVME 📖Commits: PR How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (0.991x ➖, 0↑ 0↓)
datafusion / parquet / ns (0.999x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (0.998x ➖, 0↑ 0↓)
duckdb / parquet / ns (0.996x ➖, 0↑ 0↓)
No file size changes detected. |
Benchmarks: TPC-DS SF=1 on NVME 📖Commits: PR How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (0.995x ➖, 0↑ 1↓)
datafusion / parquet / ns (0.997x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (0.986x ➖, 0↑ 0↓)
duckdb / parquet / ns (0.981x ➖, 1↑ 0↓)
No file size changes detected. |
Benchmarks: Clickbench on NVME 📖Commits: PR How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (0.996x ➖, 0↑ 0↓)
datafusion / parquet / ns (0.998x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (1.000x ➖, 0↑ 0↓)
duckdb / parquet / ns (0.996x ➖, 0↑ 1↓)
No file size changes detected. |
Benchmarks: TPC-H SF=1 on S3 📖Commits: PR How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (0.909x ➖, 5↑ 2↓)
datafusion / parquet / ns (0.948x ➖, 1↑ 0↓)
duckdb / vortex-file-compressed / ns (0.921x ➖, 1↑ 0↓)
duckdb / parquet / ns (0.996x ➖, 0↑ 1↓)
|
Summary
Split out of #10761.
ProjectionMorselwrapped all the pieces of a split in oneChunkedArray. The Arrow export then concatenated that array, re-merging nested dictionaries on the way.Changes
ProjectionMorselnow emits its pieces as separate batches, in row order.MIN_OUTPUT_ROWS(4,096 rows) are still grouped with their neighbours, so small stored chunks don't become tiny batches.large_projection_pieces_are_separate_batches. It scans four 16,384-row stored chunks inside one projection morsel and expects four unchunked batches. Ondevelopit fails, returning a single 65,536-row batch.Checks run:
cargo clippy -p vortex-layout --all-targets --all-features -- -D warnings,cargo +nightly-2026-09-10 fmt -p vortex-layout, andcargo test -p vortex-layout --lib scan.Generated by Claude Code