perf(parquet): scope exact metadata reads by storage capability - #686
Open
JunRuiLee wants to merge 4 commits into
Open
perf(parquet): scope exact metadata reads by storage capability#686JunRuiLee wants to merge 4 commits into
JunRuiLee wants to merge 4 commits into
Conversation
JunRuiLee
marked this pull request as ready for review
August 6, 2026 09:57
Contributor
|
How about object store? |
JingsongLi
marked this pull request as draft
August 6, 2026 12:51
Contributor
Author
Good point. I revised the implementation so exact metadata reads are opt-in through an explicit
The capability is decided in the storage/IO layer and propagated to the Parquet reader. Tests cover backend classification, capability propagation, exact reads, and retained prefetch. We have only benchmarked HDFS so far, so preserving the existing behavior for object stores and unknown custom backends is intentional. |
JunRuiLee
marked this pull request as ready for review
August 7, 2026 05:30
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.
Purpose
Linked issue: close #687
Use an explicit range-read capability to choose the Parquet metadata loading strategy:
OpenDAL's HDFS native service keeps a file-scoped positioned-read handle, so exact range reads reuse the same underlying HDFS file reader. The capability is determined in the IO/storage layer and propagated through
InputFileReader; the Parquet layer does not infer the backend from URI strings. CustomFileReadimplementations may explicitly opt in, while the default remains conservative.Performance validation
A local HDFS comparison showed better read performance with exact range reads than with the fixed 512 KiB prefetch. Object stores and caller-provided filesystem operators have not been benchmarked, so this change deliberately preserves their existing prefetch behavior rather than assuming the HDFS result transfers to them.
This PR remains Draft until the reproducible HDFS measurements are added. The benchmark record should include the same dataset/query for both variants, file count, representative footer-metadata sizes, repeated wall-clock results, and bytes-read or request counts when available; #687 tracks that evidence.
Brief change log
FileRead::supports_cheap_range_readscapability with a conservativefalsedefault.OffsetIndexsolely because an external row selection is present but empty.FileReadcapability-propagation tests.Tests
cargo fmt --all -- --checkcargo test --locked -p paimon --lib arrow::format::parquet::tests(49 passed)cargo test --locked -p paimon --lib scheme_tests --features storage-all(10 passed)cargo test --locked -p paimon --lib custom_fs_operator --features storage-all(3 passed)cargo clippy --locked --all-targets --workspace --features fulltext,vortex -- -D warningsgit diff --checkAPI and Format
Adds a defaulted
FileRead::supports_cheap_range_readsmethod. Existing implementations do not need to implement the new method; they receive the conservativefalsebehavior. No storage-format changes.Documentation
No user-facing documentation changes required. Benchmark evidence is tracked in #687 before the PR is marked ready.