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]
