Skip to content

Conversation

@dataroaring
Copy link
Contributor

Add support for unique_key_update_mode property in routine load to enable flexible partial columns update. This allows different rows in the same batch to update different columns, unlike fixed partial update where all rows must update the same columns.

Changes:

  • Add unique_key_update_mode property to CreateRoutineLoadInfo with values: UPSERT (default), UPDATE_FIXED_COLUMNS, UPDATE_FLEXIBLE_COLUMNS
  • Add validation for flexible partial update constraints (JSON format only, no jsonpaths, no fuzzy_parse, no COLUMNS clause, no WHERE clause, table must have skip_bitmap column enabled)
  • Update RoutineLoadJob to persist and restore the update mode
  • Update KafkaRoutineLoadJob to pass update mode to task info
  • Support ALTER ROUTINE LOAD to change unique_key_update_mode
  • Add regression tests covering basic usage and error cases
  • Fix HashMap ordering issue in gsonPostProcess for backward compatibility
  • Add validation when ALTER changes mode to UPDATE_FLEXIBLE_COLUMNS
  • Add comprehensive ALTER test cases for flexible partial update validation

What problem does this PR solve?

Issue Number: close #xxx

Related PR: #xxx

Problem Summary:

Release note

None

Check List (For Author)

  • Test

    • Regression test
    • Unit Test
    • Manual test (add detailed scripts or steps below)
    • No need to test or manual test. Explain why:
      • This is a refactor/code format and no logic has been changed.
      • Previous test can cover this change.
      • No code files have been changed.
      • Other reason
  • Behavior changed:

    • No.
    • Yes.
  • Does this need documentation?

    • No.
    • Yes.

Check List (For Reviewer who merge this PR)

  • Confirm the release note
  • Confirm test cases
  • Confirm document
  • Add branch pick label

Add support for `unique_key_update_mode` property in routine load to enable
flexible partial columns update. This allows different rows in the same batch
to update different columns, unlike fixed partial update where all rows must
update the same columns.

Changes:
- Add `unique_key_update_mode` property to CreateRoutineLoadInfo with values:
  UPSERT (default), UPDATE_FIXED_COLUMNS, UPDATE_FLEXIBLE_COLUMNS
- Add validation for flexible partial update constraints (JSON format only,
  no jsonpaths, no fuzzy_parse, no COLUMNS clause, no WHERE clause, table
  must have skip_bitmap column enabled)
- Update RoutineLoadJob to persist and restore the update mode
- Update KafkaRoutineLoadJob to pass update mode to task info
- Support ALTER ROUTINE LOAD to change unique_key_update_mode
- Add regression tests covering basic usage and error cases
- Fix HashMap ordering issue in gsonPostProcess for backward compatibility
- Add validation when ALTER changes mode to UPDATE_FLEXIBLE_COLUMNS
- Add comprehensive ALTER test cases for flexible partial update validation
Copilot AI review requested due to automatic review settings January 14, 2026 23:37
@Thearas
Copy link
Contributor

Thearas commented Jan 14, 2026

Thank you for your contribution to Apache Doris.
Don't know what should be done next? See How to process your PR.

Please clearly describe your PR:

  1. What problem was fixed (it's best to include specific error reporting information). How it was fixed.
  2. Which behaviors were modified. What was the previous behavior, what is it now, why was it modified, and what possible impacts might there be.
  3. What features were added. Why was this function added?
  4. Which code was refactored and why was this part of the code refactored?
  5. Which functions were optimized and what is the difference before and after the optimization?

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds support for flexible partial columns update in routine load jobs, enabling different rows in the same batch to update different columns. This is achieved by introducing the unique_key_update_mode property with three modes: UPSERT (default), UPDATE_FIXED_COLUMNS (backward compatible with partial_columns), and UPDATE_FLEXIBLE_COLUMNS (new flexible mode).

Changes:

  • Introduced unique_key_update_mode property to configure update behavior with three modes
  • Added validation logic for flexible partial update constraints (JSON format, no jsonpaths, no fuzzy_parse, skip_bitmap column required, etc.)
  • Updated ALTER ROUTINE LOAD to support changing the update mode with appropriate validation
  • Added comprehensive regression tests covering basic usage, error cases, and ALTER operations

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
CreateRoutineLoadInfo.java Added unique_key_update_mode property parsing, validation, and flexible partial update constraint checks
AlterRoutineLoadCommand.java Added support for altering unique_key_update_mode property with validation
RoutineLoadJob.java Added update mode persistence, restoration in gsonPostProcess, and validation logic for ALTER operations
KafkaRoutineLoadJob.java Updated to pass uniqueKeyUpdateMode to task info and changed method signature to throw UserException
NereidsRoutineLoadTaskInfo.java Changed constructor to accept uniqueKeyUpdateMode instead of isPartialUpdate flag
test_routine_load_flexible_partial_update.groovy Comprehensive test suite with 21 test cases covering feature functionality and error scenarios
test_routine_load_flexible_partial_update.out Expected output for regression tests
Comments suppressed due to low confidence (2)

fe/fe-core/src/main/java/org/apache/doris/load/routineload/RoutineLoadJob.java:1

  • The modifyPropertiesInternal method in KafkaRoutineLoadJob doesn't synchronize with the new modifyCommonJobProperties logic. When PARTIAL_COLUMNS is set here, it doesn't update uniqueKeyUpdateMode, which could lead to inconsistency. This code should be removed since modifyCommonJobProperties (called at line 792) now handles PARTIAL_COLUMNS and uniqueKeyUpdateMode synchronization.
// Licensed to the Apache Software Foundation (ASF) under one

fe/fe-core/src/main/java/org/apache/doris/load/routineload/RoutineLoadJob.java:1

  • This code duplicates the PARTIAL_UPDATE_NEW_KEY_POLICY handling that already exists in modifyCommonJobProperties. Since modifyCommonJobProperties is called first at line 792, this duplicate code can be removed to avoid redundancy and potential inconsistency.
// Licensed to the Apache Software Foundation (ASF) under one

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +224 to +255
// Backward compatibility: partial_columns=true maps to UPDATE_FIXED_COLUMNS
this.isPartialUpdate = this.jobProperties.getOrDefault(PARTIAL_COLUMNS, "false").equalsIgnoreCase("true");
if (this.isPartialUpdate) {
this.uniqueKeyUpdateMode = TUniqueKeyUpdateMode.UPDATE_FIXED_COLUMNS;
}
Copy link

Copilot AI Jan 14, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When both partial_columns and unique_key_update_mode are specified in jobProperties, the order of processing matters due to HashMap iteration. Consider adding validation in checkJobProperties to prevent users from specifying conflicting combinations like partial_columns=false with unique_key_update_mode=UPDATE_FIXED_COLUMNS.

Copilot uses AI. Check for mistakes.
(
"max_batch_interval" = "10",
"format" = "json",
"jsonpaths" = "[\\"\\$.id\\", \\"\\$.name\\", \\"\\$.score\\"]"
Copy link

Copilot AI Jan 14, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The excessive escaping in jsonpaths string makes it hard to read. Consider using single quotes for the outer string or triple-quoted strings in Groovy to improve readability: "jsonpaths" = '["$.id", "$.name", "$.score"]'

Copilot uses AI. Check for mistakes.
this.isPartialUpdate = Boolean.parseBoolean(
jobProperties.remove(CreateRoutineLoadInfo.PARTIAL_COLUMNS));
if (this.isPartialUpdate && uniqueKeyUpdateMode == TUniqueKeyUpdateMode.UPSERT) {
this.uniqueKeyUpdateMode = TUniqueKeyUpdateMode.UPDATE_FIXED_COLUMNS;
Copy link

Copilot AI Jan 14, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When PARTIAL_COLUMNS is set to false but uniqueKeyUpdateMode is already UPDATE_FIXED_COLUMNS (e.g., from a previous ALTER), this code doesn't reset uniqueKeyUpdateMode back to UPSERT. This could leave the job in an inconsistent state. Add: 'else if (!this.isPartialUpdate && uniqueKeyUpdateMode == TUniqueKeyUpdateMode.UPDATE_FIXED_COLUMNS) { this.uniqueKeyUpdateMode = TUniqueKeyUpdateMode.UPSERT; }'

Suggested change
this.uniqueKeyUpdateMode = TUniqueKeyUpdateMode.UPDATE_FIXED_COLUMNS;
this.uniqueKeyUpdateMode = TUniqueKeyUpdateMode.UPDATE_FIXED_COLUMNS;
} else if (!this.isPartialUpdate && uniqueKeyUpdateMode == TUniqueKeyUpdateMode.UPDATE_FIXED_COLUMNS) {
this.uniqueKeyUpdateMode = TUniqueKeyUpdateMode.UPSERT;

Copilot uses AI. Check for mistakes.
Comment on lines 1958 to 1964
// Backward compatibility: if unique_key_update_mode is not set, use partial_columns
if (uniqueKeyUpdateMode == TUniqueKeyUpdateMode.UPSERT) {
isPartialUpdate = Boolean.parseBoolean(v);
if (isPartialUpdate) {
uniqueKeyUpdateMode = TUniqueKeyUpdateMode.UPDATE_FIXED_COLUMNS;
}
Copy link

Copilot AI Jan 14, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The gsonPostProcess logic doesn't handle the case where PARTIAL_COLUMNS is 'false' but uniqueKeyUpdateMode was previously UPDATE_FIXED_COLUMNS. When deserializing old metadata, if partial_columns=false is processed, it should reset uniqueKeyUpdateMode to UPSERT for consistency. Add an else branch to handle this case.

Suggested change
// Backward compatibility: if unique_key_update_mode is not set, use partial_columns
if (uniqueKeyUpdateMode == TUniqueKeyUpdateMode.UPSERT) {
isPartialUpdate = Boolean.parseBoolean(v);
if (isPartialUpdate) {
uniqueKeyUpdateMode = TUniqueKeyUpdateMode.UPDATE_FIXED_COLUMNS;
}
boolean partialColumns = Boolean.parseBoolean(v);
// Backward compatibility: if unique_key_update_mode is not set, use partial_columns
if (uniqueKeyUpdateMode == TUniqueKeyUpdateMode.UPSERT) {
isPartialUpdate = partialColumns;
if (isPartialUpdate) {
uniqueKeyUpdateMode = TUniqueKeyUpdateMode.UPDATE_FIXED_COLUMNS;
}
} else if (!partialColumns
&& uniqueKeyUpdateMode == TUniqueKeyUpdateMode.UPDATE_FIXED_COLUMNS) {
// Backward compatibility: if partial_columns is false but unique_key_update_mode
// was UPDATE_FIXED_COLUMNS, reset to UPSERT for consistency
isPartialUpdate = false;
uniqueKeyUpdateMode = TUniqueKeyUpdateMode.UPSERT;

Copilot uses AI. Check for mistakes.
Comment on lines 632 to 630
// Check for conflicting settings: partial_columns=true with unique_key_update_mode=UPSERT
if (jobProperties.containsKey(PARTIAL_COLUMNS)
&& jobProperties.get(PARTIAL_COLUMNS).equalsIgnoreCase("true")
&& "UPSERT".equals(modeStr)) {
throw new AnalysisException("Cannot set both 'partial_columns=true' and "
+ "'unique_key_update_mode=UPSERT'. "
+ "Use unique_key_update_mode=UPDATE_FIXED_COLUMNS instead.");
Copy link

Copilot AI Jan 14, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This validation only checks for the conflicting case (partial_columns=true with UPSERT) but doesn't check for partial_columns=false with UPDATE_FIXED_COLUMNS or UPDATE_FLEXIBLE_COLUMNS, which is also conflicting. Add validation for these cases as well to ensure consistency.

Suggested change
// Check for conflicting settings: partial_columns=true with unique_key_update_mode=UPSERT
if (jobProperties.containsKey(PARTIAL_COLUMNS)
&& jobProperties.get(PARTIAL_COLUMNS).equalsIgnoreCase("true")
&& "UPSERT".equals(modeStr)) {
throw new AnalysisException("Cannot set both 'partial_columns=true' and "
+ "'unique_key_update_mode=UPSERT'. "
+ "Use unique_key_update_mode=UPDATE_FIXED_COLUMNS instead.");
// Check for conflicting settings between partial_columns and unique_key_update_mode
if (jobProperties.containsKey(PARTIAL_COLUMNS)) {
String partialColumnsVal = jobProperties.get(PARTIAL_COLUMNS);
// partial_columns=true is not allowed with UPSERT
if (partialColumnsVal.equalsIgnoreCase("true")
&& "UPSERT".equals(modeStr)) {
throw new AnalysisException("Cannot set both 'partial_columns=true' and "
+ "'unique_key_update_mode=UPSERT'. "
+ "Use unique_key_update_mode=UPDATE_FIXED_COLUMNS instead.");
}
// partial_columns=false is not allowed with UPDATE_FIXED_COLUMNS or UPDATE_FLEXIBLE_COLUMNS
if (partialColumnsVal.equalsIgnoreCase("false")
&& ("UPDATE_FIXED_COLUMNS".equals(modeStr)
|| "UPDATE_FLEXIBLE_COLUMNS".equals(modeStr))) {
throw new AnalysisException("Cannot set 'partial_columns=false' when "
+ "'unique_key_update_mode' is 'UPDATE_FIXED_COLUMNS' or 'UPDATE_FLEXIBLE_COLUMNS'. "
+ "Use unique_key_update_mode=UPSERT instead, or enable partial columns.");
}

Copilot uses AI. Check for mistakes.
@dataroaring dataroaring force-pushed the routineload_flexible_update branch 2 times, most recently from c821a14 to bf7fe5d Compare January 15, 2026 00:00
1. Fix checkstyle: line length exceeds 120 characters
   - Split long exception message string to comply with 120-character limit

2. Add shared parseUniqueKeyUpdateMode() helper methods in CreateRoutineLoadInfo
   - parseUniqueKeyUpdateMode(String): returns TUniqueKeyUpdateMode or null
   - parseAndValidateUniqueKeyUpdateMode(String): validates and throws on error
   - Replaces duplicated switch/if-else logic across 4 files

3. Add OlapTable.validateForFlexiblePartialUpdate() method
   - Centralizes table-level validation (MoW, skip_bitmap, light_schema_change, variant)
   - Used by CreateRoutineLoadInfo, RoutineLoadJob, and NereidsStreamLoadPlanner

4. Update all callers to use shared validation methods
   - Reduces code duplication and ensures consistent error messages

5. Allow jsonpaths, WHERE clause, and MERGE/DELETE with flexible partial update
   - Removed restrictions that blocked these features
@dataroaring dataroaring force-pushed the routineload_flexible_update branch from bf7fe5d to 3353055 Compare January 15, 2026 00:01
@dataroaring
Copy link
Contributor Author

Code review

Found 1 issue:

  1. Test/code mismatch for WHERE clause and jsonpaths validation - The test file expects validation errors for jsonpaths (Test 4, Test 16) and WHERE clause (Test 7, Test 18), but the code does NOT implement these validations. The validateFlexiblePartialUpdate() methods only check for JSON format, fuzzy_parse, and COLUMNS specification. Either update the tests to reflect the new behavior (allowing jsonpaths and WHERE clause), or restore the validations if their removal was unintended.

"""
exception "Flexible partial update does not support jsonpaths"
}

Test expects:

exception "Flexible partial update does not support jsonpaths"

But validateFlexiblePartialUpdate() in CreateRoutineLoadInfo.java does not check for jsonpaths:

private void validateFlexiblePartialUpdate(OlapTable table) throws UserException {
// Validate table-level constraints (MoW, skip_bitmap, light_schema_change, variant columns)
table.validateForFlexiblePartialUpdate();
// Routine load specific validations
// Must use JSON format
String format = jobProperties.getOrDefault(FileFormatProperties.PROP_FORMAT, "csv");
if (!"json".equalsIgnoreCase(format)) {
throw new AnalysisException("Flexible partial update only supports JSON format, but found: " + format);
}
// Cannot use fuzzy_parse
if (Boolean.parseBoolean(jobProperties.getOrDefault(JsonFileFormatProperties.PROP_FUZZY_PARSE, "false"))) {
throw new AnalysisException("Flexible partial update does not support fuzzy_parse");
}
// Cannot specify COLUMNS mapping
if (loadPropertyMap != null && loadPropertyMap.values().stream()
.anyMatch(p -> p instanceof LoadColumnClause)) {
throw new AnalysisException("Flexible partial update does not support COLUMNS specification");
}
}

🤖 Generated with Claude Code

- If this code review was useful, please react with 👍. Otherwise, react with 👎.

1. Fix exception type mismatch in KafkaRoutineLoadJob.replayModifyProperties
   - Changed catch block from DdlException to UserException since
     modifyPropertiesInternal now throws UserException

2. Fix setSchemaForPartialUpdate not called for flexible partial update
   - Changed condition from isPartialUpdate to check both
     UPDATE_FIXED_COLUMNS and UPDATE_FLEXIBLE_COLUMNS modes
   - Aligns with StreamLoadHandler behavior

3. Update tests to allow WHERE clause and jsonpaths with flexible partial update
   - Tests 4, 7, 16, 18 now verify these features work correctly
   - Added expected output for new success test cases
@dataroaring
Copy link
Contributor Author

run buildall

- Test parseUniqueKeyUpdateMode() with valid/invalid mode strings
- Test parseAndValidateUniqueKeyUpdateMode() with exception handling
- Test backward compatibility: partial_columns=true maps to UPDATE_FIXED_COLUMNS
- Test unique_key_update_mode takes precedence over partial_columns
@dataroaring
Copy link
Contributor Author

run buildall

@doris-robot
Copy link

TPC-H: Total hot run time: 31178 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpch-tools
Tpch sf100 test result on commit 93bcfcd7f4922a953e6a75db16a8767941824b21, data reload: false

------ Round 1 ----------------------------------
q1	17650	4144	4024	4024
q2	2021	366	251	251
q3	10157	1273	696	696
q4	10230	907	315	315
q5	7505	2135	1844	1844
q6	188	172	138	138
q7	938	800	669	669
q8	9271	1334	1098	1098
q9	4804	4551	4514	4514
q10	6712	1807	1372	1372
q11	515	287	278	278
q12	693	760	570	570
q13	17794	3862	3109	3109
q14	293	289	273	273
q15	572	507	499	499
q16	677	675	639	639
q17	647	770	493	493
q18	6637	6306	6323	6306
q19	1091	964	615	615
q20	398	354	239	239
q21	2985	2423	2278	2278
q22	1030	1014	958	958
Total cold run time: 102808 ms
Total hot run time: 31178 ms

----- Round 2, with runtime_filter_mode=off -----
q1	4136	4052	4045	4045
q2	320	379	335	335
q3	2101	2582	2224	2224
q4	1312	1810	1319	1319
q5	4098	4021	4068	4021
q6	204	165	126	126
q7	1857	1819	1697	1697
q8	2866	2496	2481	2481
q9	7271	7276	7183	7183
q10	2786	2739	2402	2402
q11	578	508	465	465
q12	742	779	677	677
q13	3574	4124	3379	3379
q14	303	298	279	279
q15	550	520	523	520
q16	679	677	652	652
q17	1327	1363	1390	1363
q18	8113	7792	8097	7792
q19	863	840	846	840
q20	2064	2041	1909	1909
q21	4846	4506	4287	4287
q22	1135	1041	970	970
Total cold run time: 51725 ms
Total hot run time: 48966 ms

@doris-robot
Copy link

TPC-DS: Total hot run time: 173916 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpcds-tools
TPC-DS sf100 test result on commit 93bcfcd7f4922a953e6a75db16a8767941824b21, data reload: false

query5	4401	617	473	473
query6	345	229	215	215
query7	4227	464	254	254
query8	345	261	251	251
query9	8750	2894	2863	2863
query10	475	377	339	339
query11	15243	15249	14930	14930
query12	162	116	112	112
query13	1248	488	363	363
query14	5667	3018	2726	2726
query14_1	2678	2665	2673	2665
query15	197	190	175	175
query16	1004	491	462	462
query17	1111	683	595	595
query18	2442	455	344	344
query19	229	227	216	216
query20	119	114	113	113
query21	216	141	121	121
query22	3883	4025	3991	3991
query23	16073	15564	15295	15295
query23_1	15506	15396	15559	15396
query24	7138	1553	1201	1201
query24_1	1181	1180	1189	1180
query25	561	483	436	436
query26	1248	273	162	162
query27	2751	465	283	283
query28	4562	2127	2129	2127
query29	785	553	459	459
query30	311	232	215	215
query31	772	636	567	567
query32	86	88	76	76
query33	545	368	321	321
query34	935	901	521	521
query35	740	768	694	694
query36	883	885	853	853
query37	187	109	84	84
query38	2766	2790	2708	2708
query39	783	756	719	719
query39_1	712	712	706	706
query40	226	146	126	126
query41	75	71	67	67
query42	105	103	105	103
query43	448	483	469	469
query44	1319	736	735	735
query45	189	186	181	181
query46	837	950	581	581
query47	1511	1520	1414	1414
query48	324	330	249	249
query49	615	446	348	348
query50	617	281	216	216
query51	3825	3821	3773	3773
query52	109	108	97	97
query53	288	329	275	275
query54	307	289	284	284
query55	84	81	80	80
query56	325	363	313	313
query57	1008	1026	944	944
query58	281	274	258	258
query59	2045	2125	2105	2105
query60	346	330	324	324
query61	154	152	157	152
query62	413	372	329	329
query63	298	257	263	257
query64	4885	1311	996	996
query65	3807	3794	3754	3754
query66	1474	435	322	322
query67	15431	14880	14603	14603
query68	7585	997	699	699
query69	515	357	327	327
query70	1025	968	883	883
query71	372	307	289	289
query72	5774	3379	3345	3345
query73	770	723	317	317
query74	8738	8802	8640	8640
query75	2814	2811	2480	2480
query76	3382	1079	651	651
query77	522	386	318	318
query78	9769	9669	9187	9187
query79	1540	898	570	570
query80	703	630	485	485
query81	526	266	236	236
query82	212	153	115	115
query83	265	257	239	239
query84	259	116	100	100
query85	900	530	459	459
query86	391	297	293	293
query87	2845	2884	2772	2772
query88	4289	2578	2555	2555
query89	430	357	324	324
query90	2259	175	166	166
query91	179	166	141	141
query92	94	74	69	69
query93	2196	908	522	522
query94	803	320	292	292
query95	699	391	314	314
query96	648	501	233	233
query97	2349	2368	2344	2344
query98	229	200	195	195
query99	598	598	521	521
Total cold run time: 255673 ms
Total hot run time: 173916 ms

@doris-robot
Copy link

ClickBench: Total hot run time: 27.23 s
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/clickbench-tools
ClickBench test result on commit 93bcfcd7f4922a953e6a75db16a8767941824b21, data reload: false

query1	0.05	0.05	0.05
query2	0.09	0.04	0.04
query3	0.26	0.08	0.09
query4	1.61	0.11	0.11
query5	0.28	0.26	0.25
query6	1.14	0.66	0.66
query7	0.03	0.03	0.02
query8	0.05	0.04	0.04
query9	0.56	0.48	0.48
query10	0.55	0.56	0.54
query11	0.13	0.09	0.10
query12	0.14	0.11	0.11
query13	0.59	0.58	0.60
query14	0.98	0.95	0.95
query15	0.78	0.77	0.78
query16	0.40	0.40	0.42
query17	1.08	1.05	1.07
query18	0.23	0.21	0.22
query19	1.94	1.89	1.92
query20	0.02	0.01	0.01
query21	15.44	0.24	0.13
query22	5.13	0.05	0.04
query23	15.71	0.29	0.10
query24	1.66	0.69	0.81
query25	0.11	0.07	0.12
query26	0.14	0.14	0.13
query27	0.08	0.05	0.05
query28	4.47	1.06	0.88
query29	12.53	3.94	3.17
query30	0.27	0.13	0.12
query31	2.81	0.64	0.39
query32	3.24	0.54	0.45
query33	3.06	3.04	3.01
query34	16.07	5.05	4.40
query35	4.46	4.46	4.43
query36	0.65	0.49	0.49
query37	0.11	0.07	0.06
query38	0.07	0.05	0.04
query39	0.05	0.03	0.04
query40	0.17	0.15	0.13
query41	0.08	0.03	0.03
query42	0.05	0.03	0.03
query43	0.05	0.03	0.04
Total cold run time: 97.32 s
Total hot run time: 27.23 s

Test the backward compatibility and precedence logic directly
without calling gsonPostProcess() which requires origStmt
@dataroaring
Copy link
Contributor Author

run buildall

@doris-robot
Copy link

TPC-H: Total hot run time: 32188 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpch-tools
Tpch sf100 test result on commit 7931212a840c9f804e16b116001e8d7921146aaf, data reload: false

------ Round 1 ----------------------------------
q1	17745	4288	4076	4076
q2	2184	383	236	236
q3	10174	1235	713	713
q4	10230	804	294	294
q5	7491	2028	1908	1908
q6	191	174	142	142
q7	924	813	679	679
q8	9267	1375	1176	1176
q9	5176	4660	4586	4586
q10	7078	1810	1416	1416
q11	617	293	274	274
q12	721	735	610	610
q13	17794	3854	3113	3113
q14	305	295	265	265
q15	591	521	505	505
q16	675	692	641	641
q17	655	776	516	516
q18	6669	6395	7015	6395
q19	1321	1162	653	653
q20	402	407	249	249
q21	3298	2732	2715	2715
q22	1115	1089	1026	1026
Total cold run time: 104623 ms
Total hot run time: 32188 ms

----- Round 2, with runtime_filter_mode=off -----
q1	4211	4235	4309	4235
q2	329	401	337	337
q3	2368	2793	2432	2432
q4	1424	1941	1484	1484
q5	4500	4199	4218	4199
q6	223	176	133	133
q7	1978	1967	1826	1826
q8	2583	2376	2376	2376
q9	6990	7009	7168	7009
q10	2600	2712	2321	2321
q11	597	471	464	464
q12	710	749	609	609
q13	3713	3909	3125	3125
q14	271	279	254	254
q15	523	498	485	485
q16	612	664	623	623
q17	1083	1331	1358	1331
q18	7299	7279	7240	7240
q19	826	799	824	799
q20	1895	1993	1794	1794
q21	4615	4253	4170	4170
q22	1028	1007	980	980
Total cold run time: 50378 ms
Total hot run time: 48226 ms

@doris-robot
Copy link

TPC-DS: Total hot run time: 174083 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpcds-tools
TPC-DS sf100 test result on commit 7931212a840c9f804e16b116001e8d7921146aaf, data reload: false

query5	4411	619	492	492
query6	336	230	246	230
query7	4230	449	250	250
query8	372	248	243	243
query9	8729	2891	2895	2891
query10	536	410	341	341
query11	15145	15048	14743	14743
query12	196	115	112	112
query13	1259	468	393	393
query14	6475	3056	2862	2862
query14_1	2679	2681	2671	2671
query15	210	194	171	171
query16	3419	514	472	472
query17	1093	686	577	577
query18	2281	447	340	340
query19	224	222	199	199
query20	124	116	117	116
query21	605	136	121	121
query22	3970	3878	3836	3836
query23	16070	15578	15243	15243
query23_1	15612	15510	15392	15392
query24	7198	1561	1189	1189
query24_1	1164	1206	1210	1206
query25	560	470	422	422
query26	1266	266	160	160
query27	2672	439	282	282
query28	4486	2138	2131	2131
query29	743	543	448	448
query30	370	246	209	209
query31	835	629	565	565
query32	88	77	80	77
query33	604	369	326	326
query34	907	865	528	528
query35	724	762	689	689
query36	907	941	836	836
query37	167	100	83	83
query38	2716	2701	2638	2638
query39	798	768	745	745
query39_1	715	710	713	710
query40	217	130	116	116
query41	67	63	63	63
query42	105	100	112	100
query43	433	426	437	426
query44	1322	736	728	728
query45	191	185	188	185
query46	831	935	571	571
query47	1434	1373	1352	1352
query48	325	326	239	239
query49	594	420	339	339
query50	620	281	212	212
query51	3752	3807	3754	3754
query52	102	104	99	99
query53	288	322	273	273
query54	283	262	302	262
query55	82	79	76	76
query56	299	312	298	298
query57	1056	978	960	960
query58	265	264	252	252
query59	1903	2098	2082	2082
query60	333	327	321	321
query61	164	157	155	155
query62	384	357	308	308
query63	298	267	269	267
query64	4570	1255	981	981
query65	3752	3801	3746	3746
query66	1298	433	327	327
query67	15434	15649	15548	15548
query68	2458	1094	736	736
query69	459	375	337	337
query70	1008	912	921	912
query71	338	311	299	299
query72	5401	3190	3366	3190
query73	607	722	316	316
query74	8845	8764	8580	8580
query75	2753	2800	2485	2485
query76	1852	1048	666	666
query77	375	399	306	306
query78	9754	10012	9140	9140
query79	1064	908	582	582
query80	1284	581	489	489
query81	547	265	235	235
query82	973	150	110	110
query83	319	256	239	239
query84	257	118	98	98
query85	932	505	459	459
query86	419	324	321	321
query87	2872	2844	2785	2785
query88	3491	2573	2568	2568
query89	396	352	333	333
query90	2047	172	171	171
query91	172	168	148	148
query92	77	75	71	71
query93	1049	900	525	525
query94	635	321	287	287
query95	591	397	321	321
query96	631	513	231	231
query97	2335	2367	2341	2341
query98	213	206	210	206
query99	649	582	506	506
Total cold run time: 250430 ms
Total hot run time: 174083 ms

@doris-robot
Copy link

ClickBench: Total hot run time: 26.8 s
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/clickbench-tools
ClickBench test result on commit 7931212a840c9f804e16b116001e8d7921146aaf, data reload: false

query1	0.05	0.05	0.05
query2	0.14	0.04	0.04
query3	0.27	0.08	0.09
query4	1.60	0.11	0.12
query5	0.27	0.24	0.24
query6	1.16	0.64	0.64
query7	0.03	0.03	0.02
query8	0.06	0.04	0.05
query9	0.58	0.51	0.50
query10	0.55	0.55	0.55
query11	0.16	0.10	0.10
query12	0.15	0.11	0.11
query13	0.60	0.59	0.60
query14	0.96	0.95	0.94
query15	0.79	0.76	0.78
query16	0.40	0.39	0.39
query17	0.99	1.06	1.05
query18	0.22	0.21	0.21
query19	2.03	1.89	1.85
query20	0.02	0.02	0.02
query21	15.44	0.26	0.14
query22	5.09	0.05	0.04
query23	15.85	0.29	0.10
query24	2.13	0.23	0.80
query25	0.08	0.07	0.05
query26	0.14	0.14	0.13
query27	0.08	0.06	0.05
query28	4.82	1.07	0.88
query29	12.53	3.93	3.16
query30	0.28	0.15	0.12
query31	2.82	0.64	0.39
query32	3.24	0.55	0.47
query33	3.01	3.02	3.07
query34	16.25	5.10	4.45
query35	4.54	4.57	4.43
query36	0.65	0.49	0.49
query37	0.13	0.08	0.07
query38	0.08	0.04	0.04
query39	0.06	0.02	0.03
query40	0.18	0.14	0.14
query41	0.10	0.03	0.03
query42	0.06	0.03	0.03
query43	0.04	0.04	0.03
Total cold run time: 98.63 s
Total hot run time: 26.8 s

@hello-stephen
Copy link
Contributor

FE UT Coverage Report

Increment line coverage 16.54% (21/127) 🎉
Increment coverage report
Complete coverage report

Use 'can only support' format instead of 'requires' to match
existing test expectations in test_flexible_partial_update_restricts.groovy
@dataroaring
Copy link
Contributor Author

run buildall

@doris-robot
Copy link

TPC-H: Total hot run time: 31576 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpch-tools
Tpch sf100 test result on commit b90147e01103ab581dbe2b2e5d8b45602ecbcf6c, data reload: false

------ Round 1 ----------------------------------
q1	17643	4194	4025	4025
q2	2095	344	271	271
q3	10081	1247	734	734
q4	10225	872	312	312
q5	7528	2113	1801	1801
q6	188	171	141	141
q7	919	779	668	668
q8	9280	1375	1146	1146
q9	4812	4605	4453	4453
q10	6718	1772	1384	1384
q11	532	306	285	285
q12	710	751	571	571
q13	17768	3832	3027	3027
q14	291	294	277	277
q15	573	509	509	509
q16	678	695	640	640
q17	632	829	469	469
q18	6527	6399	6844	6399
q19	907	1077	644	644
q20	443	410	278	278
q21	3156	2553	2486	2486
q22	1147	1100	1056	1056
Total cold run time: 102853 ms
Total hot run time: 31576 ms

----- Round 2, with runtime_filter_mode=off -----
q1	4342	4337	4220	4220
q2	322	400	322	322
q3	2301	2923	2322	2322
q4	1411	1889	1418	1418
q5	4698	4302	4357	4302
q6	220	166	128	128
q7	1988	1896	1774	1774
q8	2572	2381	2334	2334
q9	7342	7067	7290	7067
q10	2426	2657	2351	2351
q11	566	488	463	463
q12	730	792	642	642
q13	3701	4051	3283	3283
q14	294	296	287	287
q15	543	495	501	495
q16	664	695	610	610
q17	1077	1213	1250	1213
q18	7690	7285	7232	7232
q19	811	794	785	785
q20	1870	1949	1843	1843
q21	4425	4200	4096	4096
q22	1074	1021	957	957
Total cold run time: 51067 ms
Total hot run time: 48144 ms

Use single-quoted string with proper escaping pattern to prevent
token recognition error on dollar sign in jsonpaths.
@dataroaring
Copy link
Contributor Author

run buildall

@doris-robot
Copy link

TPC-H: Total hot run time: 34145 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpch-tools
Tpch sf100 test result on commit 5ac283792ca239aa528a7146b9e9b04446c37bfa, data reload: false

------ Round 1 ----------------------------------
q1	17648	4384	4344	4344
q2	2067	401	267	267
q3	10068	1403	767	767
q4	10233	863	322	322
q5	7784	2189	1925	1925
q6	246	178	142	142
q7	981	822	669	669
q8	9306	1509	1258	1258
q9	5283	4677	4645	4645
q10	6821	1824	1442	1442
q11	524	364	315	315
q12	734	802	670	670
q13	17836	3978	3218	3218
q14	305	303	293	293
q15	603	532	513	513
q16	749	719	675	675
q17	799	878	593	593
q18	7224	7280	7142	7142
q19	1340	1092	777	777
q20	481	435	296	296
q21	3505	2756	2815	2756
q22	1189	1134	1116	1116
Total cold run time: 105726 ms
Total hot run time: 34145 ms

----- Round 2, with runtime_filter_mode=off -----
q1	4622	4504	4430	4430
q2	376	491	348	348
q3	2538	2805	2529	2529
q4	1543	1959	1523	1523
q5	4599	4424	4302	4302
q6	231	172	126	126
q7	2049	1963	1870	1870
q8	2614	2463	2472	2463
q9	7274	7317	7180	7180
q10	2464	2566	2148	2148
q11	546	501	449	449
q12	706	767	632	632
q13	3496	3955	3261	3261
q14	292	288	284	284
q15	540	509	495	495
q16	631	681	652	652
q17	1182	1345	1365	1345
q18	7536	7611	7360	7360
q19	944	926	953	926
q20	1915	2008	1840	1840
q21	4722	4450	4267	4267
q22	1129	1076	1021	1021
Total cold run time: 51949 ms
Total hot run time: 49451 ms

@doris-robot
Copy link

TPC-DS: Total hot run time: 182437 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpcds-tools
TPC-DS sf100 test result on commit 5ac283792ca239aa528a7146b9e9b04446c37bfa, data reload: false

query5	4494	717	555	555
query6	357	256	234	234
query7	4236	515	288	288
query8	371	283	264	264
query9	8733	3399	3410	3399
query10	548	415	352	352
query11	15796	15559	15263	15263
query12	192	122	126	122
query13	1284	570	429	429
query14	6490	3180	3000	3000
query14_1	2811	2944	2795	2795
query15	211	207	182	182
query16	1040	533	528	528
query17	1146	742	612	612
query18	2561	474	415	415
query19	241	245	212	212
query20	135	122	122	122
query21	224	148	136	136
query22	4136	4215	4078	4078
query23	16261	15834	15610	15610
query23_1	15552	15675	15583	15583
query24	7132	1620	1264	1264
query24_1	1231	1268	1270	1268
query25	564	478	430	430
query26	1244	291	185	185
query27	2705	490	319	319
query28	4477	2565	2546	2546
query29	803	560	467	467
query30	330	256	221	221
query31	808	683	610	610
query32	94	81	79	79
query33	544	402	377	377
query34	955	957	608	608
query35	754	788	705	705
query36	1046	1047	947	947
query37	156	107	96	96
query38	2823	2810	2754	2754
query39	800	785	775	775
query39_1	720	716	738	716
query40	229	147	130	130
query41	76	75	70	70
query42	123	110	116	110
query43	550	535	521	521
query44	1501	865	867	865
query45	192	195	183	183
query46	935	998	638	638
query47	1447	1625	1451	1451
query48	370	372	284	284
query49	629	454	380	380
query50	734	313	231	231
query51	3869	3843	3864	3843
query52	116	121	108	108
query53	321	340	285	285
query54	322	315	301	301
query55	94	89	95	89
query56	354	351	355	351
query57	1035	1100	948	948
query58	313	302	288	288
query59	2464	2553	2400	2400
query60	390	369	365	365
query61	203	175	178	175
query62	420	409	363	363
query63	305	283	275	275
query64	5029	1412	1101	1101
query65	3908	3693	3757	3693
query66	1449	454	343	343
query67	15848	15950	15871	15871
query68	2473	1263	893	893
query69	482	405	373	373
query70	1162	1128	1091	1091
query71	354	347	315	315
query72	5528	3562	3793	3562
query73	712	776	361	361
query74	9016	8918	8712	8712
query75	2839	2872	2540	2540
query76	2311	1137	727	727
query77	420	431	370	370
query78	9894	9866	9226	9226
query79	2508	1011	685	685
query80	1822	675	568	568
query81	556	282	301	282
query82	983	163	125	125
query83	358	300	283	283
query84	270	133	110	110
query85	967	572	523	523
query86	435	346	337	337
query87	2963	2944	2898	2898
query88	4201	3112	3046	3046
query89	423	369	356	356
query90	1845	197	190	190
query91	198	195	168	168
query92	94	83	78	78
query93	1230	1020	637	637
query94	677	349	333	333
query95	640	370	430	370
query96	777	559	270	270
query97	2407	2433	2385	2385
query98	252	234	220	220
query99	662	618	600	600
Total cold run time: 255890 ms
Total hot run time: 182437 ms

@doris-robot
Copy link

ClickBench: Total hot run time: 27.98 s
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/clickbench-tools
ClickBench test result on commit 5ac283792ca239aa528a7146b9e9b04446c37bfa, data reload: false

query1	0.06	0.05	0.05
query2	0.10	0.06	0.04
query3	0.27	0.10	0.09
query4	1.61	0.13	0.12
query5	0.30	0.28	0.27
query6	1.15	0.69	0.68
query7	0.03	0.02	0.03
query8	0.06	0.05	0.05
query9	0.59	0.53	0.52
query10	0.58	0.58	0.58
query11	0.16	0.11	0.10
query12	0.16	0.11	0.12
query13	0.62	0.60	0.61
query14	0.97	0.98	0.97
query15	0.82	0.81	0.80
query16	0.41	0.41	0.40
query17	1.13	1.16	1.21
query18	0.24	0.22	0.23
query19	2.02	1.93	1.95
query20	0.03	0.02	0.01
query21	15.39	0.30	0.16
query22	5.00	0.06	0.05
query23	15.91	0.32	0.12
query24	1.70	0.27	0.32
query25	0.11	0.07	0.06
query26	0.17	0.16	0.16
query27	0.08	0.06	0.07
query28	4.27	1.11	0.90
query29	12.57	4.40	3.53
query30	0.29	0.16	0.13
query31	2.82	0.69	0.42
query32	3.26	0.59	0.47
query33	3.16	3.09	3.10
query34	16.15	5.14	4.43
query35	4.48	4.48	4.51
query36	0.68	0.52	0.52
query37	0.12	0.07	0.07
query38	0.08	0.05	0.04
query39	0.05	0.04	0.04
query40	0.17	0.16	0.15
query41	0.10	0.04	0.04
query42	0.04	0.03	0.03
query43	0.05	0.05	0.04
Total cold run time: 97.96 s
Total hot run time: 27.98 s

@hello-stephen
Copy link
Contributor

FE Regression Coverage Report

Increment line coverage 45.67% (58/127) 🎉
Increment coverage report
Complete coverage report

Flexible partial update cannot work correctly with jsonpaths because
jsonpaths extracts values by position without knowing which columns
should be preserved. This change adds validation to reject jsonpaths
when flexible partial update is enabled.

Changes:
- Add jsonpaths validation in CreateRoutineLoadInfo for CREATE path
- Add jsonpaths validation in RoutineLoadJob for ALTER path
- Convert jsonpaths success tests to error tests
- Update expected test outputs
@dataroaring
Copy link
Contributor Author

run buildall

1 similar comment
@dataroaring
Copy link
Contributor Author

run buildall

…ttings

- 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
@doris-robot
Copy link

TPC-H: Total hot run time: 31610 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpch-tools
Tpch sf100 test result on commit 3d2a33a425f2643b28688d8a4f66dfae21fafb3d, data reload: false

------ Round 1 ----------------------------------
q1	17825	4267	4098	4098
q2	2180	385	250	250
q3	10164	1307	740	740
q4	10249	806	308	308
q5	7546	2089	1872	1872
q6	189	169	138	138
q7	930	827	670	670
q8	9290	1449	1187	1187
q9	5313	4520	4660	4520
q10	7120	1806	1420	1420
q11	560	303	273	273
q12	781	734	605	605
q13	17814	3864	3058	3058
q14	284	297	292	292
q15	604	530	522	522
q16	694	674	637	637
q17	696	811	528	528
q18	6590	6356	6419	6356
q19	1230	978	633	633
q20	397	358	249	249
q21	3034	2472	2325	2325
q22	1052	1010	929	929
Total cold run time: 104542 ms
Total hot run time: 31610 ms

----- Round 2, with runtime_filter_mode=off -----
q1	4122	4130	4092	4092
q2	338	404	315	315
q3	2108	2697	2239	2239
q4	1395	1801	1348	1348
q5	4224	4087	4131	4087
q6	220	174	132	132
q7	1885	2254	1894	1894
q8	2627	2397	2445	2397
q9	7287	7135	7132	7132
q10	2591	2808	2295	2295
q11	562	475	454	454
q12	734	835	645	645
q13	3729	4246	3507	3507
q14	282	308	282	282
q15	544	497	501	497
q16	651	689	676	676
q17	1236	1419	1413	1413
q18	8332	7820	7643	7643
q19	969	912	911	911
q20	2040	2125	1924	1924
q21	4619	4263	4098	4098
q22	1105	1047	980	980
Total cold run time: 51600 ms
Total hot run time: 48961 ms

@doris-robot
Copy link

TPC-DS: Total hot run time: 175918 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpcds-tools
TPC-DS sf100 test result on commit 3d2a33a425f2643b28688d8a4f66dfae21fafb3d, data reload: false

query5	4378	642	500	500
query6	318	235	222	222
query7	4239	459	256	256
query8	364	250	243	243
query9	8718	3120	3087	3087
query10	502	374	357	357
query11	15370	15086	14953	14953
query12	178	119	117	117
query13	1250	509	387	387
query14	6349	3137	2862	2862
query14_1	2705	2688	2738	2688
query15	209	200	182	182
query16	991	508	491	491
query17	1123	684	562	562
query18	2475	448	345	345
query19	235	230	208	208
query20	129	120	118	118
query21	284	147	145	145
query22	3971	4235	3873	3873
query23	15946	15821	15377	15377
query23_1	15475	15499	15564	15499
query24	7265	1560	1217	1217
query24_1	1217	1231	1229	1229
query25	557	480	416	416
query26	1251	274	169	169
query27	2728	472	309	309
query28	4477	2253	2215	2215
query29	771	558	470	470
query30	366	250	213	213
query31	789	651	587	587
query32	95	79	76	76
query33	562	353	317	317
query34	924	893	550	550
query35	730	749	681	681
query36	903	927	807	807
query37	145	102	85	85
query38	2702	2761	2691	2691
query39	784	746	734	734
query39_1	712	729	727	727
query40	214	130	117	117
query41	66	64	65	64
query42	109	102	100	100
query43	466	464	470	464
query44	1409	788	794	788
query45	196	188	180	180
query46	863	946	581	581
query47	1442	1539	1446	1446
query48	331	330	247	247
query49	606	436	365	365
query50	636	277	222	222
query51	3910	3757	3893	3757
query52	105	110	104	104
query53	300	322	279	279
query54	301	286	287	286
query55	95	88	82	82
query56	336	328	337	328
query57	1051	1044	968	968
query58	283	278	270	270
query59	2264	2297	2123	2123
query60	353	350	328	328
query61	156	146	150	146
query62	404	357	321	321
query63	307	274	263	263
query64	4904	1275	957	957
query65	3834	3760	3801	3760
query66	1453	425	317	317
query67	15668	15683	15348	15348
query68	2445	1111	763	763
query69	456	368	327	327
query70	988	971	947	947
query71	328	312	297	297
query72	5341	3117	3278	3117
query73	617	712	311	311
query74	8692	8754	8670	8670
query75	2748	2781	2441	2441
query76	2273	1064	662	662
query77	354	381	310	310
query78	9794	9918	9198	9198
query79	1060	910	587	587
query80	1258	579	501	501
query81	528	261	233	233
query82	1323	151	113	113
query83	374	271	251	251
query84	258	123	96	96
query85	948	512	444	444
query86	395	303	301	301
query87	2922	2873	2774	2774
query88	3590	2655	2633	2633
query89	395	359	320	320
query90	1878	181	171	171
query91	177	179	132	132
query92	78	77	73	73
query93	922	914	536	536
query94	627	307	288	288
query95	615	330	379	330
query96	652	503	235	235
query97	2354	2400	2332	2332
query98	235	203	199	199
query99	595	582	526	526
Total cold run time: 249424 ms
Total hot run time: 175918 ms

@doris-robot
Copy link

ClickBench: Total hot run time: 26.96 s
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/clickbench-tools
ClickBench test result on commit 3d2a33a425f2643b28688d8a4f66dfae21fafb3d, data reload: false

query1	0.05	0.05	0.05
query2	0.10	0.05	0.05
query3	0.25	0.08	0.08
query4	1.60	0.12	0.11
query5	0.27	0.25	0.26
query6	1.14	0.66	0.65
query7	0.03	0.03	0.03
query8	0.06	0.04	0.04
query9	0.58	0.52	0.50
query10	0.55	0.55	0.56
query11	0.15	0.10	0.10
query12	0.15	0.11	0.11
query13	0.60	0.59	0.60
query14	0.95	0.95	0.94
query15	0.80	0.78	0.79
query16	0.41	0.39	0.41
query17	1.08	0.98	1.02
query18	0.23	0.22	0.21
query19	1.96	1.80	1.88
query20	0.03	0.01	0.02
query21	15.49	0.28	0.15
query22	5.04	0.05	0.05
query23	15.82	0.28	0.10
query24	0.98	0.42	0.60
query25	0.08	0.05	0.05
query26	0.14	0.13	0.13
query27	0.09	0.06	0.05
query28	3.91	1.10	0.90
query29	12.54	3.90	3.17
query30	0.28	0.14	0.12
query31	2.82	0.63	0.41
query32	3.25	0.56	0.46
query33	2.95	3.02	3.05
query34	16.08	5.14	4.43
query35	4.49	4.46	4.44
query36	0.66	0.51	0.50
query37	0.10	0.07	0.07
query38	0.07	0.04	0.03
query39	0.05	0.03	0.03
query40	0.18	0.14	0.13
query41	0.10	0.03	0.02
query42	0.05	0.03	0.03
query43	0.04	0.04	0.03
Total cold run time: 96.2 s
Total hot run time: 26.96 s

@hello-stephen
Copy link
Contributor

FE Regression Coverage Report

Increment line coverage 31.58% (42/133) 🎉
Increment coverage report
Complete coverage report

The waitForTaskFinish function waits until rowCount > expectedMinRows.
Test 1 has 5 initial rows and expects 6 rows after processing (3 updates
+ 1 insert). The wait condition was set to 4, which meant `5 > 4` was
immediately true and the test didn't wait for Kafka messages to be
consumed.

Changed expectedMinRows from 4 to 5 so the test properly waits for
at least 6 rows.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@dataroaring dataroaring force-pushed the routineload_flexible_update branch from adb92cd to cc1f29b Compare January 16, 2026 17:59
@dataroaring
Copy link
Contributor Author

run buildall

@doris-robot
Copy link

TPC-H: Total hot run time: 31524 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpch-tools
Tpch sf100 test result on commit cc1f29b5b256f5a843b5b12055fab0c8eb1652b8, data reload: false

------ Round 1 ----------------------------------
q1	17642	4221	4044	4044
q2	2043	346	242	242
q3	10179	1294	692	692
q4	10214	876	308	308
q5	7464	2075	1825	1825
q6	189	166	139	139
q7	910	809	648	648
q8	9278	1325	1114	1114
q9	5013	4554	4490	4490
q10	6768	1788	1390	1390
q11	505	299	297	297
q12	717	742	584	584
q13	17788	3881	3144	3144
q14	289	291	283	283
q15	588	514	506	506
q16	708	675	636	636
q17	680	772	508	508
q18	6823	6577	6550	6550
q19	1239	966	635	635
q20	379	350	257	257
q21	3046	2460	2279	2279
q22	1072	1012	953	953
Total cold run time: 103534 ms
Total hot run time: 31524 ms

----- Round 2, with runtime_filter_mode=off -----
q1	4097	4030	4047	4030
q2	311	414	339	339
q3	2148	2584	2241	2241
q4	1329	1755	1310	1310
q5	4106	4009	4003	4003
q6	209	172	131	131
q7	1878	1816	1612	1612
q8	2864	2516	2397	2397
q9	7207	7231	7132	7132
q10	2495	2767	2399	2399
q11	539	485	457	457
q12	766	756	657	657
q13	3678	4099	3554	3554
q14	293	314	292	292
q15	549	498	489	489
q16	666	722	645	645
q17	1144	1401	1331	1331
q18	8051	8127	7733	7733
q19	867	861	852	852
q20	2033	2087	1998	1998
q21	5041	4639	4158	4158
q22	1080	1026	970	970
Total cold run time: 51351 ms
Total hot run time: 48730 ms

@doris-robot
Copy link

TPC-DS: Total hot run time: 173448 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpcds-tools
TPC-DS sf100 test result on commit cc1f29b5b256f5a843b5b12055fab0c8eb1652b8, data reload: false

query5	4389	590	484	484
query6	330	228	199	199
query7	4221	450	259	259
query8	324	253	233	233
query9	8713	2870	2866	2866
query10	516	360	332	332
query11	15396	15117	14852	14852
query12	170	113	110	110
query13	1232	467	404	404
query14	6232	3013	2781	2781
query14_1	2667	2633	2647	2633
query15	203	188	172	172
query16	972	485	468	468
query17	1102	665	553	553
query18	2447	431	341	341
query19	220	220	193	193
query20	116	120	118	118
query21	214	140	123	123
query22	3874	3952	3989	3952
query23	15907	15567	15260	15260
query23_1	15588	15535	15351	15351
query24	7166	1551	1157	1157
query24_1	1154	1162	1169	1162
query25	549	479	419	419
query26	839	266	150	150
query27	2750	442	279	279
query28	4546	2167	2162	2162
query29	763	526	433	433
query30	317	241	206	206
query31	801	625	571	571
query32	88	77	76	76
query33	542	348	315	315
query34	890	875	530	530
query35	726	763	683	683
query36	858	896	847	847
query37	132	95	86	86
query38	2728	2749	2600	2600
query39	768	765	729	729
query39_1	726	747	708	708
query40	221	139	121	121
query41	73	67	67	67
query42	109	100	100	100
query43	407	421	445	421
query44	1318	743	743	743
query45	190	187	182	182
query46	836	948	586	586
query47	1372	1473	1396	1396
query48	307	317	239	239
query49	581	424	332	332
query50	601	271	204	204
query51	3815	3796	3775	3775
query52	106	111	93	93
query53	281	324	270	270
query54	298	258	266	258
query55	81	77	83	77
query56	298	296	296	296
query57	999	950	928	928
query58	262	249	251	249
query59	2159	2104	2119	2104
query60	326	321	309	309
query61	146	142	146	142
query62	400	356	315	315
query63	294	265	257	257
query64	4339	1237	972	972
query65	3813	3782	3770	3770
query66	1391	418	301	301
query67	15482	15612	15536	15536
query68	2700	1096	754	754
query69	440	356	314	314
query70	1001	956	865	865
query71	324	306	292	292
query72	5498	3126	3225	3126
query73	589	745	305	305
query74	8702	8705	8453	8453
query75	2750	2810	2451	2451
query76	2365	1063	639	639
query77	360	378	305	305
query78	9892	10018	9198	9198
query79	1064	900	593	593
query80	1289	567	464	464
query81	558	264	231	231
query82	1006	142	108	108
query83	325	251	234	234
query84	256	110	87	87
query85	882	474	441	441
query86	425	327	327	327
query87	2944	2856	2808	2808
query88	3480	2584	2567	2567
query89	381	352	320	320
query90	1940	167	168	167
query91	168	156	137	137
query92	73	75	66	66
query93	1066	878	543	543
query94	643	313	257	257
query95	574	337	366	337
query96	652	519	234	234
query97	2323	2349	2316	2316
query98	202	203	198	198
query99	590	598	510	510
Total cold run time: 246208 ms
Total hot run time: 173448 ms

@doris-robot
Copy link

ClickBench: Total hot run time: 26.7 s
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/clickbench-tools
ClickBench test result on commit cc1f29b5b256f5a843b5b12055fab0c8eb1652b8, data reload: false

query1	0.05	0.04	0.05
query2	0.09	0.05	0.04
query3	0.26	0.08	0.08
query4	1.60	0.11	0.12
query5	0.27	0.24	0.25
query6	1.15	0.68	0.65
query7	0.03	0.03	0.03
query8	0.06	0.04	0.04
query9	0.56	0.49	0.50
query10	0.55	0.54	0.55
query11	0.14	0.10	0.10
query12	0.14	0.10	0.11
query13	0.60	0.58	0.59
query14	0.95	0.96	0.93
query15	0.79	0.78	0.78
query16	0.39	0.39	0.41
query17	1.02	1.01	1.04
query18	0.22	0.22	0.22
query19	1.87	1.90	1.88
query20	0.02	0.01	0.01
query21	15.45	0.28	0.14
query22	5.20	0.05	0.04
query23	15.94	0.27	0.11
query24	1.13	0.23	0.50
query25	0.13	0.05	0.08
query26	0.16	0.14	0.14
query27	0.08	0.06	0.04
query28	3.93	1.07	0.88
query29	12.53	3.94	3.18
query30	0.30	0.14	0.12
query31	2.82	0.61	0.40
query32	3.25	0.55	0.46
query33	2.96	2.98	3.11
query34	16.21	5.05	4.39
query35	4.51	4.43	4.44
query36	0.63	0.51	0.50
query37	0.12	0.06	0.07
query38	0.07	0.04	0.04
query39	0.04	0.03	0.03
query40	0.17	0.14	0.13
query41	0.09	0.03	0.04
query42	0.04	0.03	0.04
query43	0.05	0.04	0.03
Total cold run time: 96.57 s
Total hot run time: 26.7 s

@hello-stephen
Copy link
Contributor

FE UT Coverage Report

Increment line coverage 16.15% (21/130) 🎉
Increment coverage report
Complete coverage report

…rror

The actual error message from OlapTable.validateForFlexiblePartialUpdate()
is "Flexible partial update can only support table without variant columns."
@dataroaring dataroaring force-pushed the routineload_flexible_update branch from cc1f29b to bf4cfdd Compare January 16, 2026 21:58
@dataroaring
Copy link
Contributor Author

run buildall

@doris-robot
Copy link

TPC-H: Total hot run time: 31051 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpch-tools
Tpch sf100 test result on commit bf4cfdd1cf23b7fede121420bd5da458111d8f60, data reload: false

------ Round 1 ----------------------------------
q1	17671	4320	4047	4047
q2	2037	348	235	235
q3	10208	1241	689	689
q4	10207	843	303	303
q5	7525	2012	1861	1861
q6	189	174	140	140
q7	928	774	660	660
q8	9269	1399	1169	1169
q9	4920	4646	4465	4465
q10	6776	1786	1388	1388
q11	535	281	284	281
q12	706	730	587	587
q13	17770	3765	3068	3068
q14	287	291	272	272
q15	589	528	512	512
q16	678	674	663	663
q17	655	816	492	492
q18	6653	6297	6277	6277
q19	1251	998	608	608
q20	384	353	239	239
q21	2926	2347	2144	2144
q22	998	1005	951	951
Total cold run time: 103162 ms
Total hot run time: 31051 ms

----- Round 2, with runtime_filter_mode=off -----
q1	4083	4056	4060	4056
q2	315	424	314	314
q3	2129	2566	2229	2229
q4	1282	1731	1302	1302
q5	4053	3990	4055	3990
q6	218	173	133	133
q7	1820	1792	1710	1710
q8	2743	2520	2511	2511
q9	7256	7527	7197	7197
q10	2556	2889	2484	2484
q11	563	470	497	470
q12	768	763	652	652
q13	3733	4127	3716	3716
q14	280	306	271	271
q15	547	502	503	502
q16	636	675	623	623
q17	1154	1365	1389	1365
q18	7966	7894	7805	7805
q19	856	833	809	809
q20	1984	2115	1891	1891
q21	4741	4439	4059	4059
q22	1122	1032	1001	1001
Total cold run time: 50805 ms
Total hot run time: 49090 ms

@doris-robot
Copy link

TPC-DS: Total hot run time: 174016 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpcds-tools
TPC-DS sf100 test result on commit bf4cfdd1cf23b7fede121420bd5da458111d8f60, data reload: false

query5	4408	631	466	466
query6	313	221	232	221
query7	4223	469	262	262
query8	333	240	242	240
query9	8708	2896	2891	2891
query10	475	362	307	307
query11	15185	15084	14877	14877
query12	174	121	118	118
query13	1247	477	383	383
query14	5833	3253	2870	2870
query14_1	2758	2724	2736	2724
query15	209	190	169	169
query16	982	483	443	443
query17	1067	619	534	534
query18	2411	408	327	327
query19	213	214	183	183
query20	122	111	111	111
query21	215	135	110	110
query22	3878	4073	3857	3857
query23	15956	15598	15123	15123
query23_1	15449	15359	15262	15262
query24	7141	1550	1168	1168
query24_1	1152	1173	1166	1166
query25	541	445	396	396
query26	1251	270	162	162
query27	2769	439	281	281
query28	4592	2157	2152	2152
query29	752	522	438	438
query30	311	249	206	206
query31	795	628	566	566
query32	87	80	73	73
query33	558	367	321	321
query34	882	867	547	547
query35	736	755	697	697
query36	920	903	851	851
query37	141	104	86	86
query38	2705	2732	2656	2656
query39	772	761	718	718
query39_1	699	707	708	707
query40	223	139	121	121
query41	71	68	67	67
query42	106	108	102	102
query43	457	446	409	409
query44	1383	766	752	752
query45	194	183	181	181
query46	846	946	584	584
query47	1384	1493	1461	1461
query48	316	328	241	241
query49	625	445	355	355
query50	624	272	202	202
query51	3776	3846	3886	3846
query52	109	110	98	98
query53	294	325	272	272
query54	298	283	270	270
query55	84	86	80	80
query56	328	315	329	315
query57	1006	962	938	938
query58	278	264	267	264
query59	2019	2173	2161	2161
query60	348	346	324	324
query61	180	165	159	159
query62	388	354	339	339
query63	301	276	264	264
query64	4974	1230	943	943
query65	3720	3738	3718	3718
query66	1458	423	316	316
query67	15509	15498	15419	15419
query68	2446	1124	770	770
query69	442	346	321	321
query70	977	970	956	956
query71	334	317	289	289
query72	5296	3095	3194	3095
query73	610	711	308	308
query74	8638	8721	8528	8528
query75	2731	2807	2491	2491
query76	2276	1068	698	698
query77	356	390	306	306
query78	9680	9879	9104	9104
query79	1152	917	589	589
query80	1290	574	498	498
query81	542	262	232	232
query82	991	149	105	105
query83	316	254	244	244
query84	256	118	99	99
query85	893	476	427	427
query86	453	303	319	303
query87	2868	2844	2861	2844
query88	3514	2584	2562	2562
query89	387	349	320	320
query90	1996	167	161	161
query91	165	162	139	139
query92	75	77	72	72
query93	1096	906	538	538
query94	648	309	306	306
query95	591	339	310	310
query96	647	506	226	226
query97	2345	2376	2303	2303
query98	220	202	198	198
query99	589	584	522	522
Total cold run time: 246548 ms
Total hot run time: 174016 ms

@doris-robot
Copy link

ClickBench: Total hot run time: 26.88 s
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/clickbench-tools
ClickBench test result on commit bf4cfdd1cf23b7fede121420bd5da458111d8f60, data reload: false

query1	0.05	0.06	0.05
query2	0.09	0.04	0.04
query3	0.26	0.09	0.08
query4	1.61	0.12	0.11
query5	0.26	0.25	0.26
query6	1.15	0.66	0.64
query7	0.03	0.03	0.03
query8	0.05	0.04	0.04
query9	0.59	0.50	0.49
query10	0.54	0.54	0.54
query11	0.14	0.09	0.10
query12	0.14	0.10	0.10
query13	0.60	0.58	0.59
query14	0.94	0.94	0.93
query15	0.79	0.77	0.78
query16	0.38	0.39	0.40
query17	1.04	1.02	0.98
query18	0.24	0.21	0.21
query19	2.00	1.91	1.93
query20	0.01	0.02	0.01
query21	15.44	0.27	0.14
query22	5.23	0.05	0.04
query23	15.79	0.29	0.10
query24	1.73	0.87	0.32
query25	0.11	0.06	0.08
query26	0.13	0.14	0.14
query27	0.10	0.06	0.05
query28	4.40	1.08	0.88
query29	12.52	3.90	3.19
query30	0.28	0.14	0.12
query31	2.82	0.65	0.39
query32	3.24	0.57	0.46
query33	2.96	3.01	3.02
query34	16.40	5.08	4.47
query35	4.54	4.48	4.43
query36	0.64	0.51	0.49
query37	0.11	0.07	0.06
query38	0.06	0.04	0.03
query39	0.04	0.03	0.03
query40	0.17	0.15	0.13
query41	0.08	0.03	0.03
query42	0.04	0.03	0.03
query43	0.04	0.04	0.04
Total cold run time: 97.78 s
Total hot run time: 26.88 s

@hello-stephen
Copy link
Contributor

FE UT Coverage Report

Increment line coverage 16.15% (21/130) 🎉
Increment coverage report
Complete coverage report

@hello-stephen
Copy link
Contributor

FE Regression Coverage Report

Increment line coverage 76.92% (100/130) 🎉
Increment coverage report
Complete coverage report

1 similar comment
@hello-stephen
Copy link
Contributor

FE Regression Coverage Report

Increment line coverage 76.92% (100/130) 🎉
Increment coverage report
Complete coverage report

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants