linliu-code opened a new pull request, #19322:
URL: https://github.com/apache/hudi/pull/19322

   ## What
   Adds **Oracle** Debezium CDC support, **stacked on #19110** (Postgres/MySQL 
transformer foundation). Draft until #19110 merges — this branch currently 
includes #19110's commits; it will be rebased onto master (diff reduced to the 
Oracle delta) once #19110 lands.
   
   ## Design (v9, no payload merging)
   Oracle v9 tables merge via the built-in **`EVENT_TIME_ORDERING` mode + a new 
`FILL_UNCHANGED` partial-update strategy**, not the payload. `FILL_UNCHANGED` 
is driven by Oracle's positive `_changed_columns` list: columns in the list 
take the incoming value (incl. explicit null); every other data column 
preserves the prior value **for any type** (correct under PK-only supplemental 
logging, which `FILL_UNAVAILABLE` — sentinel + string/bytes only — cannot 
express). The merged record stores the **union** of both records' 
changed-columns so a log-vs-log deltaMerge feeding the base merge can't drop a 
disjointly-changed column. `OracleDebeziumAvroPayload` remains for legacy 
tables and as the identifier the v9 inference keys on.
   
   ## Changes
   - **hudi-common:** `OracleDebeziumAvroPayload`; Oracle `DebeziumConstants` + 
`resolveOrderingFields`; `PartialUpdateMode.FILL_UNCHANGED` + 
`PartialUpdateHandler.reconcileChangedColumns` (implemented against 
`HoodieSchema`); `HoodieTableConfig` v9 inference (mode + partial-update + 
ordering + merge props).
   - **hudi-utilities:** `OracleDebeziumTransformer` (flatten + SCN metadata + 
`_event_ordering` + `_changed_columns` + `_hoodie_is_deleted` + op filter).
   
   ## Tests
   `TestOracleDebeziumTransformer`, `TestOracleDebeziumAvroPayload` (38), 
`TestPartialUpdateHandler` FILL_UNCHANGED unit cases (11, incl. union / 
non-string-preservation / whitespace / schema-evolution corners), 
`TestHoodieTableConfigDebeziumOrdering` Oracle inference, and a v9 read-path IT 
`TestOracleDebeziumV9ReadMerge`.
   
   Verified locally: hudi-common 61 tests pass, checkstyle/scalastyle/rat 
clean. (hudi-utilities full compile was blocked in my local env by an unrelated 
pre-existing Kafka-version issue in `KafkaAvroSchemaDeserializer` — CI builds 
it correctly.)
   
   🤖 Generated with [Claude Code](https://claude.com/claude-code)


-- 
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