This is an automated email from the ASF dual-hosted git repository. dataroaring pushed a commit to branch routineload_flexible_update in repository https://gitbox.apache.org/repos/asf/doris.git
commit b49a9bf9bedc78fe6c7f6ac45d91953cb240ccf9 Author: Yongqiang YANG <[email protected]> AuthorDate: Thu Jan 15 21:58:14 2026 -0800 fix: Handle conflicting partial_columns and unique_key_update_mode settings - unique_key_update_mode takes precedence over partial_columns for backward compatibility - partial_columns is only used when unique_key_update_mode is not explicitly set (defaults to UPSERT) - Add clear comments explaining the precedence behavior --- .../org/apache/doris/load/routineload/RoutineLoadJob.java | 5 ++++- .../trees/plans/commands/info/CreateRoutineLoadInfo.java | 11 ++--------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/load/routineload/RoutineLoadJob.java b/fe/fe-core/src/main/java/org/apache/doris/load/routineload/RoutineLoadJob.java index 585c3167154..309ef614c14 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/load/routineload/RoutineLoadJob.java +++ b/fe/fe-core/src/main/java/org/apache/doris/load/routineload/RoutineLoadJob.java @@ -1957,7 +1957,8 @@ public abstract class RoutineLoadJob // Process remaining properties jobProperties.forEach((k, v) -> { if (k.equals(CreateRoutineLoadInfo.PARTIAL_COLUMNS)) { - // Backward compatibility: if unique_key_update_mode is not set, use partial_columns + // Backward compatibility: only use partial_columns if unique_key_update_mode is not set + // unique_key_update_mode takes precedence if (uniqueKeyUpdateMode == TUniqueKeyUpdateMode.UPSERT) { isPartialUpdate = Boolean.parseBoolean(v); if (isPartialUpdate) { @@ -2054,6 +2055,8 @@ public abstract class RoutineLoadJob } if (jobProperties.containsKey(CreateRoutineLoadInfo.PARTIAL_COLUMNS)) { + // Backward compatibility: only use partial_columns if unique_key_update_mode is UPSERT (not explicitly set) + // unique_key_update_mode takes precedence this.isPartialUpdate = Boolean.parseBoolean( jobProperties.remove(CreateRoutineLoadInfo.PARTIAL_COLUMNS)); if (this.isPartialUpdate && uniqueKeyUpdateMode == TUniqueKeyUpdateMode.UPSERT) { diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateRoutineLoadInfo.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateRoutineLoadInfo.java index 9394257013c..4a32cb3d4e3 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateRoutineLoadInfo.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateRoutineLoadInfo.java @@ -627,17 +627,10 @@ public class CreateRoutineLoadInfo { timezone = TimeUtils.checkTimeZoneValidAndStandardize(jobProperties.getOrDefault(TIMEZONE, timezone)); // check unique_key_update_mode + // Note: unique_key_update_mode takes precedence over partial_columns for backward compatibility if (jobProperties.containsKey(UNIQUE_KEY_UPDATE_MODE)) { String modeStr = jobProperties.get(UNIQUE_KEY_UPDATE_MODE); - TUniqueKeyUpdateMode mode = parseAndValidateUniqueKeyUpdateMode(modeStr); - // Check for conflicting settings: partial_columns=true with unique_key_update_mode=UPSERT - if (jobProperties.containsKey(PARTIAL_COLUMNS) - && jobProperties.get(PARTIAL_COLUMNS).equalsIgnoreCase("true") - && mode == TUniqueKeyUpdateMode.UPSERT) { - throw new AnalysisException("Cannot set both 'partial_columns=true' and " - + "'unique_key_update_mode=UPSERT'. " - + "Use unique_key_update_mode=UPDATE_FIXED_COLUMNS instead."); - } + parseAndValidateUniqueKeyUpdateMode(modeStr); } // check partial_update_new_key_behavior --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
