Skip to content

partial-update: support ignore-delete semantics #572

Description

@shyjsarah

Search before asking

  • I searched the existing issues and pull requests and found nothing similar.

Please describe the bug

Paimon Rust currently rejects ignore-delete options on primary-key tables using
merge-engine=partial-update, even though Java Paimon supports this mode.

For example, creating or opening a table with either option fails validation:

merge-engine=partial-update
ignore-delete=true

or:

merge-engine=partial-update
partial-update.ignore-delete=true

The read-side and flush-time partial-update merge functions also reject
DELETE and UPDATE_BEFORE rows unconditionally. This prevents Rust readers
from opening Java-created tables and historical files that use the supported
ignore-delete semantics.

Expected behavior:

  • Both ignore-delete and partial-update.ignore-delete are accepted.
  • With an effective value of true, DELETE and UPDATE_BEFORE are ignored.
  • The default and an explicit false still reject retract rows.
  • Ignored retract rows do not consume writer buffer, sequence numbers, or enter
    input changelog files.
  • Once enabled, the effective value cannot be changed from true to false,
    matching Java Paimon compatibility safeguards.
  • Other advanced partial-update options remain unsupported.

Proposed solution

  • Narrowly allowlist the two supported option keys in partial-update validation.
  • Apply ignore-delete semantics in both read-side merge and write-side filtering.
  • Filter direct _VALUE_KIND batches before writer buffering.
  • Add schema, writer, reader, core integration, and DataFusion integration tests.
  • Document the supported behavior and remaining limitations.

Are you willing to submit a PR?

  • I'm willing to submit a PR!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions