Use Rust core for native Arrow upserts and table updates - #10185
Merged
JingsongLi merged 21 commits intoSep 26, 2026
Merged
Conversation
JingsongLi
force-pushed
the
codex/pypaimon-native-batch-update
branch
from
September 26, 2026 07:35
8418b5d to
48d5aee
Compare
leaves12138
approved these changes
Sep 26, 2026
leaves12138
left a comment
Contributor
There was a problem hiding this comment.
LGTM. Reviewed the native/Python dispatch boundaries, commit identity and message conversion, snapshot handling, and Ray RowIdFileIndex integration. An additional 805 tests passed with native plan/read/write/update/commit enabled, covering Ray MERGE, conflict rewriting, Blob fallbacks, and native operations. Also checked the existing same-revision paired Rust validation, including Java interoperability. No blocking issues found.
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.
Summary
Enable native update CI and wrap the public Rust core table update APIs. Based on merged apache/paimon-rust#961 and the follow-up core fixes in apache/paimon-rust#969. Native CI is pinned to Rust revision
780bc7957f24a78828b7910369e079bbff30e92c.new_update_by_row_id()to the incremental coreupdate_columns(data, columns)and cumulativecommit_messagesAPI for batch and stream tables.RowIdFileIndexdirectly instead of constructing an updater.PYPAIMON_TEST_NATIVE_UPDATE=1together with native plan/read/write/commit, and fail the native lane if row-ID, grouped, predicate, upsert or incremental operations are not exercised.No private matcher or matched-writer bridge is exposed by this integration. The Rust binding wraps the core operation interfaces. Some PyPaimon operations, including MERGE/shard and predicate-delete orchestration, remain in Python.
Test findings and paired Rust fixes
The first complete hosted Native run had 7056 passed, 8 failed, 225 skipped. All eight failures concerned external/legacy deletion-vector paths. The paired Rust PR fixes these paths and manifest identities, output cleanup, unchanged partition-column validation and partition-scoped upserts. It also includes Java-compatible external path strategy and comma-list parsing regressions.
Verification
With the rebuilt paired Rust binding, PyArrow 19.0.1 and all five native switches enabled:
--all-targets -- -D warnings), formatting and diff checks passed.Hosted CI result
Both workflows passed:
3b1a15e9abed20e6db8351bf0c0baee06ed08f46: https://github.com/apache/paimon/actions/runs/36243417621. All Python version, requirements/Ray, PyTorch, Native and aggregate checks passed.780bc7957f24a78828b7910369e079bbff30e92cand finished with 7065 passed, 225 skipped, 0 failed. Counts: plans 3766, reads 3784, writes 7837, commits 503; updates row-ID 136, grouped 51, predicate 62, upsert 85, incremental 9.