Repository navigation
feat(vortex): add predicate pushdown and optimize selective reads - #471
Open
zhouyc-ali wants to merge 5 commits into
Open
zhouyc-ali wants to merge 5 commits into
zhouyc-ali wants to merge 5 commits into
Conversation
SteNicholas
reviewed
Oct 27, 2026
SteNicholas
reviewed
Oct 27, 2026
Retain the smaller side of bitmap selections and preserve physical row mapping. Add regression coverage for dense, sparse, and reconfigured selections. Use callback I/O in native-scan test fixtures to avoid the Rust async filesystem path reported by TSAN, without adding suppressions. Add Apache license headers to both Vortex patch files.
lxy-9602
reviewed
Oct 29, 2026
zjw1111
reviewed
Oct 29, 2026
lxy-9602
reviewed
Oct 29, 2026
Make membership and I/O limits configurable, simplify reader state, and bound native Arrow materialization, including nested arrays. Preserve safe temporal and decimal fallbacks, propagate type errors, and extend native and SDK regressions without changing shared readers.
SteNicholas
reviewed
Nov 4, 2026
Release selection and row-index state on close, build dense selections from compressed complements, and push empty projections into native scans. Preserve Arrow schema error details, clarify pushdown eligibility and document fallback and LTZ metadata rules. Add focused regressions and fix cast declarations reported by clang-tidy.
Preserve configurable read coalescing and both integration-test includes while adopting upstream comments and the shared timezone utility.
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.
Purpose
Linked issue: #319.
Push supported predicates, projections and bitmap selections into native Vortex scans while preserving physical file row IDs and Paimon's residual-filter semantics.
Related Java NaN fix: apache/paimon#10985.
Tests
Added and updated tests covering:
IN and NOT IN, including duplicates, integer boundaries, configurable list limits,
and combined AND/OR predicates.
floating-point semantics, and membership size limits. Type mismatches and
malformed/native construction errors are checked separately; legal temporal
constants outside the native range fall back. Fixed-seed differential tests
check native results before SDK residual filtering.
and IN/NOT IN, with fallback for rounding or overflow.
duplicate/missing-field and incompatible-type rejection, and SDK NULL filling
for evolved fields. Empty-projection tests inspect native schemas and
callback reads to verify omitted payload columns are skipped.
including empty/NULL nested children and shared child arrays; unreferenced
elements must not be materialized.
and projection, preserving physical row IDs across batches. The single-deletion
regression verifies one exclusion index instead of expanding all surviving rows.
Large full selections and single deletions cover compressed bounds checks,
physical row mapping and signed 32-bit row-ID boundaries without modifying
the input bitmap.
active scan and returned batches remain valid after reset or reader destruction.
Closing a retained reader releases selection storage and hidden row-index
arrays while separately retained output batches remain valid.
errors and handle null native messages before releasing the stream.
read/write failures, waiting for in-flight callbacks on abort, and deferred
stream closure.
enabled/disabled. Complete append probe/payload passes and enabled residual
filtering require exact rows; other candidate paths must retain all matches.
Primary-key updates/deletes check merged-row integrity before value filtering,
and schema evolution covers missing columns and a user column named
_row_idx.Local validation passed 130 Vortex C++ tests and 33 SDK/ORC/Parquet regressions.
The subsequent declaration-style fixes passed the affected regression and
clang-tidy checks. The unchanged native library previously passed 106 Rust
tests; TSAN was not rerun locally for this revision.
API and Format
No changes to public C++ API signatures or the table protocol. The stored format remains Vortex; new LTZ files use UTC metadata without changing epoch values. Add the runtime reader options:
vortex.read.in-pushdown.max-values: default32;0disables IN/NOT IN pushdown. The original list length, including duplicates, is counted; oversized lists fall back without truncation.vortex.read.io-coalesce.max-gap: default1048576bytes (1 MiB).vortex.read.io-coalesce.max-size: default16777216bytes (16 MiB).The private Vortex FFI is extended; its patched header and native library must be rebuilt together. Readers continue to require SDK residual filtering (
EnablePredicateFilter(true)) or equivalent filtering by the caller for exact results. The shared read path and the meanings of its filtering flags are unchanged.Documentation
Document the numeric Vortex reader options, defaults, concrete fallback rules, residual-filter requirement and LTZ metadata compatibility in
docs/source/api/file_format.rst. Remove the format-specific additions fromdocs/source/user_guide/read.rst.Generative AI tooling
Generated-by: OpenAI Codex 0.163.0