JingsongLi opened a new pull request, #1054:
URL: https://github.com/apache/paimon-rust/pull/1054

   ## Purpose
   
   PyPaimon supports column-subset append writes and upserts, but the Rust 
writer currently requires all table columns. Partial input falls back to 
Python, and FLOAT/DOUBLE upsert keys are also excluded from Native.
   
   ## Changes
   
   - Add core `TableWrite.with_write_type` for top-level append-table columns, 
preserving field IDs, input order, routing columns and physical `write_cols` 
metadata.
   - Follow Java `BaseAppendFileStoreWrite.withWriteType`: omit unselected 
fields from files, project file indexes, and use only the selected dedicated 
BLOB writers. Like Java, a dedicated-only write has no normal writer and 
retains its group row-count limit.
   - Allow column-subset Arrow upserts. Keys and partition columns remain 
required; matched rows require the configured update columns, while new rows 
append all supplied columns. Keep source duplicate last-wins and target 
duplicate fanout behavior.
   - Support ordinary FLOAT/DOUBLE upsert keys through the existing Arrow key 
encoding.
   - Expose write-type selection through thin batch/stream Python bindings and 
update stubs.
   
   Regression coverage includes reordered and chunked subsets, partition/bucket 
routing, omitted columns, duplicate keys, NULL/fractional keys, insert-only 
inputs missing update columns, malformed schemas, BLOB-only partial files with 
explicit existing row IDs, and failed dedicated-writer cleanup.
   
   ## Verification
   
   - `cargo test -p paimon --lib`: 3737 passed, 6 ignored.
   - `cargo test -p paimon --test table_partial_write_test --test 
table_update_test`: 37 passed.
   - Python binding suite: 312 tests passed; the corrected stream-commit test 
and all 31 write tests passed on rerun.
   - `cargo +1.98.0 clippy --locked -p paimon -p pypaimon_rust --all-targets -- 
-D warnings`.
   - `cargo +1.98.0 fmt --all -- --check`.
   - Paired PyPaimon Native write/update capability tests: 578 passed against 
the local binding.
   
   The paired Python PR will continue using Rust `main` in CI and depends on 
this PR merging first.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to