Repository navigation
[Python] Keep Native read planning in the selected execution backend - #10742
Merged
JingsongLi merged 7 commits intoOct 22, 2026
Merged
Conversation
JingsongLi
marked this pull request as draft
October 22, 2026 06:35
JingsongLi
marked this pull request as ready for review
October 22, 2026 08:35
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
Keep read planning and execution within the selected backend. Public read and scan classes retain configuration, validation and dispatch; Native adapters do not initialize Python executors.
Changes
AsyncStreamingTableScanandStreamTableScanfacades select through the same dispatch rule as builders. Eitherscan.native-plan.enabledorread.native.enabledselects Native planning. Backend selection completes before frames or checkpoints are consumed; planning errors never switch a live stream to Python.follow_up_scannerinjection as requested; built-in delta/changelog selection remains internal to each backend.TableScan.file_scannerconfiguration independent of backend construction. Ordinary scans, statistics and raw file metadata use dispatch. Accessing this property does not instantiate the Python scanner, and custom manifest-source callbacks are not exposed.with_file_filtersand call no-argumentplan_files(). Raw file plans require unrestricted whole-table permission and ignore projection, LIMIT, row ranges and distribution.TableRead; shared validation/configuration/output adapters stay outside execution.Planning API naming
Rename the complete split-planning operation to
plan_all()across the public Python API, both backends, read/write/update consumers, tests and documentation. No old-name alias is retained. It returns a splitPlan, including L0 and all matching data-evolution column files while preserving predicates, LIMIT and unrestricted authorization.plan_files()returns raw manifest entries.Review follow-up
Dependency
The typed file-planning API requires apache/paimon-rust#1197. This PR is draft until that dependency merges. Native CI continues to build Rust main; no SDK version probes or compatibility fallback were added.
Tests
distributed_input_execution_test.pypassed all 6 cases in a separate process because its Daft global runner otherwise retains a Ray actor from an earlier cluster lifecycle. No unrelated Daft/Ray behavior was changed.git diff --checkpassed.