From a68f1159e80dd671a45e549d56ebc96233531534 Mon Sep 17 00:00:00 2001 From: Irene Rodriguez Date: Fri, 3 Jul 2026 16:49:51 +0200 Subject: [PATCH] add flink support FLIP-510 --- .../org/apache/paimon/flink/sink/FlinkTableSinkBase.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/sink/FlinkTableSinkBase.java b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/sink/FlinkTableSinkBase.java index 2790a8a92670..4fd8144a9dda 100644 --- a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/sink/FlinkTableSinkBase.java +++ b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/sink/FlinkTableSinkBase.java @@ -95,6 +95,13 @@ && new CoreOptions(options).definedAggFunc()) { builder.addContainedKind(kind); } } + // FLIP-510: a primary-key Paimon table applies changes (including deletes) by primary + // key, so it can always accept key-only (partial) deletes. Advertise this as a sink + // capability so the planner can drop the upstream ChangelogNormalize when the source + // produces deletes by key. We set the flag unconditionally (rather than echoing + // requestedMode.keyOnlyDeletes()) because the planner builds the requested mode via + // ModifyKindSet#toDefaultChangelogMode(), which does not carry the keyOnlyDeletes flag. + builder.keyOnlyDeletes(true); return builder.build(); } }