Skip to content

[feat](Variant) Support NestedGroup for variant columns with search DSL NESTED clause#60847

Open
eldenmoon wants to merge 12 commits intoapache:masterfrom
eldenmoon:feat-nested-commit
Open

[feat](Variant) Support NestedGroup for variant columns with search DSL NESTED clause#60847
eldenmoon wants to merge 12 commits intoapache:masterfrom
eldenmoon:feat-nested-commit

Conversation

@eldenmoon
Copy link
Member

@eldenmoon eldenmoon commented Feb 26, 2026

NESTED clause

Introduce NestedGroup support for tracking nested array structures in variant columns, including storage layer definitions, core data structures, read/write path integration, FE pruning rule enhancements, and NESTED clause in search DSL.

IDL definitions:

Add NestedGroupInfoPB, NestedOffsetsIndexPB in segment_v2.proto
Add ColumnPathInfo fields for nested group metadata
Add NESTED clause type and nested_path field in Exprs.thrift
Core data structures (BE):

nested_group_path.h: Path utilities for nested group identification
nested_group_provider.h/cpp: Provider interface with default no-op implementation
Offsets mapping index and offset tracking utilities for nested arrays
Variant reader/writer integration (BE):

Integrate NestedGroup-aware read path in variant_column_reader

Integrate NestedGroup-aware write path in variant_column_writer_impl
Add segment_iterator and segment_creator integration
Enhance path_in_data, variant_util, json_parser for nested structures
Add variant_nested_group_max_depth config
Update variant_statistics for nested group tracking
FE pruning and rewrite rules:

Add AccessPathExpressionCollector for access path collection

Refactor NestedColumnPruning and VariantSubPathPruning logic
Enhance ExpressionAnalyzer and expression context for pruning support
Add NestedGroup array support in Explode/ExplodeOuter
Search DSL NESTED clause:

Add NESTED token and grammar rules in SearchLexer/Parser.g4

Implement NESTED clause parsing in SearchDslParser
Implement NESTED function evaluation in function_search and vsearch
Tests:

nested_group_path_test, nested_group_path_filter_test, nested_group_provider_test
function_search_nested_test, vsearch_expr_test updates
PruneNestedColumnTest, VariantPruningLogicTest, SearchDslParserTest (FE)
4 new regression test suites for variant pruning

Add protobuf definitions for NestedGroup storage support:
- NestedGroupInfoPB for nested group statistics
- NestedOffsetsIndexPB for nested offsets index
- Fields in ColumnPathInfo for nested group metadata
- NESTED_OFFSETS_INDEX enum value

Add thrift definition for NESTED search clause:
- NESTED clause type in TSearchClause
- nested_path field for NESTED clause
Introduce the NestedGroup framework for tracking nested array structures
in variant columns:

- nested_group_path.h: Path utilities for nested group identification
- nested_group_provider.h/cpp: Provider interface with default no-op impl
- nested_offsets_mapping_index.h/cpp: Offsets mapping index for nested arrays
- offset_manager.h/offset_manager_impl.h: Offset tracking utilities

Tests:
- nested_group_path_test.cpp: Path utility tests
- nested_group_path_filter_test.cpp: Path filter tests
- nested_group_provider_test.cpp: Provider contract tests
Add NESTED clause to the search DSL for querying nested array structures
within variant columns.

FE changes:
- SearchLexer/Parser.g4: Add NESTED token and grammar rules
- SearchDslParser.java: Parse NESTED clause with path specification
- SearchPredicate.java: Support NESTED clause type

BE changes:
- vsearch.cpp: Evaluate NESTED clause in search expressions
- function_search.cpp/h: Implement NESTED function evaluation

Tests:
- SearchDslParserTest.java: FE parser tests
- function_search_nested_test.cpp: BE NESTED function tests
- vsearch_expr_test.cpp: Search expression tests
Improve FE rewrite rules for variant sub-path pruning and nested column
pruning to better support variant column access patterns.

FE changes:
- AccessPathExpressionCollector.java: New collector for access paths
- AccessPathPlanCollector.java: Enhanced plan collection
- NestedColumnPruning.java: Refactored nested column pruning logic
- VariantSubPathPruning.java: Enhanced sub-path pruning
- ExpressionAnalyzer.java: Expression analysis updates
- Explode/ExplodeOuter.java: NestedGroup array support

BE changes:
- vexpr.cpp/h: Expression node enhancements
- vexpr_context.h: Context changes for pruning support

Tests:
- PruneNestedColumnTest.java: Nested column pruning tests
- VariantPruningLogicTest.java: Variant pruning logic tests
Integrate NestedGroup support into the variant column read/write path
and related utility components.

Core reader/writer:
- variant_column_reader.cpp/h: NestedGroup-aware read path
- variant_column_writer_impl.cpp/h: NestedGroup-aware write path
- variant_statistics.h: Statistics tracking for nested groups
- column_reader.cpp/h: Column reader NestedGroup support
- segment_iterator.cpp: Iterator integration
- segment_creator.cpp: Creator integration

Utilities:
- path_in_data.cpp/h: Path utilities for nested structures
- variant_util.cpp/h: Variant utility enhancements
- json_parser.cpp: JSON parser improvements
- column_variant.cpp/h: Column variant changes
- config.cpp/h: variant_nested_group_max_depth config
- exec_env.h: Query cache setter

Tests & regression:
- Modified existing tests for compatibility
- 4 new regression test suites for variant pruning
Copilot AI review requested due to automatic review settings February 26, 2026 07:10
@eldenmoon eldenmoon requested a review from zclllyybb as a code owner February 26, 2026 07:10
@hello-stephen
Copy link
Contributor

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 introduces NestedGroup-related infrastructure for VARIANT (multi-level array/object nesting) and adds a NESTED(path, query) clause to the search DSL, alongside expanded access-path/sub-path pruning support and coverage tests across FE/BE and regression suites.

Changes:

  • Extend FE search DSL parsing/AST + thrift explain to support a top-level NESTED() clause with a nested_path.
  • Add NestedGroup metadata/index plumbing (proto, iterators, mapping index) and related BE execution support for nested search evaluation.
  • Expand VARIANT access-path/sub-path pruning support (including numeric array indices) and add regression + unit tests.

Reviewed changes

Copilot reviewed 73 out of 74 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
regression-test/suites/variant_p0/test_variant_mixed_object_array_pruning_debugpoint.groovy New regression coverage for mixed object/array pruning with debugpoints
regression-test/suites/variant_p0/test_variant_compaction_root_empty_after_full.groovy New regression to ensure compaction doesn’t empty VARIANT root
regression-test/suites/variant_p0/test_variant_access_path_pruning_debugpoint.groovy New regression coverage for access path pruning via debugpoints
regression-test/suites/variant_p0/test_sub_path_pruning.groovy Adds explode-related pruning assertions/explain checks
gensrc/thrift/Exprs.thrift Adds NESTED clause support via nested_path in thrift
gensrc/proto/segment_v2.proto Adds NestedGroup-related metadata and a nested offsets index proto
fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SearchDslParserTest.java Adds FE unit tests for NESTED() parsing/validation rules
fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/VariantPruningLogicTest.java New FE pruning logic tests for VARIANT access paths/subcolumns
fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PruneNestedColumnTest.java Extends pruning tests to cover VARIANT access path propagation
fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SearchDslParser.java Implements NESTED() parsing, AST fields, and top-level validation
fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/generator/ExplodeOuter.java Allows EXPLODE_OUTER to accept VARIANT inputs
fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/generator/Explode.java Allows EXPLODE to accept VARIANT inputs
fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/VariantSubPathPruning.java Supports integer-like literal indices in VARIANT subpaths
fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/SlotTypeReplacer.java Includes VARIANT in slot replacement/pruning decision
fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/RewriteSearchToSlots.java Minor cleanup around variant-subcolumn comment/handling
fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/NestedColumnPruning.java Extends pruning entry conditions & access-path handling for VARIANT
fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/AccessPathPlanCollector.java Collects access paths for VARIANT and adjusts generate handling
fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/AccessPathExpressionCollector.java Builds VARIANT access paths including numeric indices
fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/ExpressionAnalyzer.java Marks VARIANT usage as “hasNestedColumns” for pruning pipeline
fe/fe-core/src/main/java/org/apache/doris/analysis/SearchPredicate.java Includes nested_path in explain and thrift conversion
fe/fe-core/src/main/antlr4/org/apache/doris/nereids/search/SearchParser.g4 Adds parser rule for nestedQuery
fe/fe-core/src/main/antlr4/org/apache/doris/nereids/search/SearchLexer.g4 Adds lexer mode/tokens for nested path scanning
be/test/vec/function/function_search_test.cpp Updates clause categorization/mapping for NESTED; moves tests out
be/test/vec/function/function_search_nested_test.cpp New BE unit tests focused on NESTED clause behavior
be/test/vec/exprs/vsearch_expr_test.cpp Updates inverted index context creation; adds NESTED fallback test
be/test/vec/exprs/vexpr_evalute_inverted_index_test.cpp Updates IndexExecContext construction signature
be/test/vec/exprs/try_cast_expr_test.cpp Adds include needed after context/header refactor
be/test/olap/rowset/segment_v2/segment_iterator_no_need_read_data_test.cpp Updates test expectation for extracted VARIANT read-data behavior
be/test/olap/rowset/segment_v2/nested_group_provider_test.cpp New tests for default NestedGroup provider contracts (CE behavior)
be/test/olap/rowset/segment_v2/nested_group_path_test.cpp New tests for nested group path utilities/constants
be/test/olap/rowset/segment_v2/nested_group_path_filter_test.cpp New tests for NestedGroup path filtering behavior
be/test/olap/rowset/segment_v2/external_col_meta_util_test.cpp Removes non-English comment note
be/src/vec/runtime/vparquet_transformer.cpp Fully-qualifies parquet types/exceptions to avoid ambiguity
be/src/vec/olap/olap_data_convertor.cpp Adds convertor for unsigned bigint (offset/length internal cols)
be/src/vec/json/path_in_data.h Adds array-depth helper + new path utility declarations
be/src/vec/json/path_in_data.cpp Implements prefix stripping + path append helpers
be/src/vec/json/json_parser.cpp Adjusts nested array handling & array alignment behavior
be/src/vec/functions/function_search.h Adds nested-search APIs and forward declarations
be/src/vec/functions/function_search.cpp Implements NESTED evaluation flow + execution context refactor
be/src/vec/exprs/vsearch.cpp Passes IndexExecContext/segment info; improves VARIANT subcolumn binding
be/src/vec/exprs/vexpr_context.h Extends IndexExecContext with segment pointer + iterator options
be/src/vec/exprs/vexpr.h Moves contains_blockable_function definition out-of-header
be/src/vec/exprs/vexpr.cpp Implements new contains_blockable_function; SEARCH_EXPR treated as slot-acting
be/src/vec/exec/scan/olap_scanner.cpp Uses parent_unique_id fallback for access-path maps
be/src/vec/common/variant_util.h Tracks presence of nested groups in variant extended info
be/src/vec/common/variant_util.cpp Nullable-aware array base-type detection; compaction skips extended schema when nested groups exist
be/src/vec/columns/column_variant.h Adds missing include for column vector usage
be/src/vec/columns/column_variant.cpp Minor include cleanup/formatting
be/src/runtime/exec_env.h Adds setter for inverted index query cache
be/src/olap/rowset/segment_v2/variant/variant_statistics.h Adds NestedGroup stats, pb (de)serialization updates, renames doc-value map
be/src/olap/rowset/segment_v2/variant/variant_external_meta_reader.cpp Removes non-English comment note
be/src/olap/rowset/segment_v2/variant/variant_column_writer_impl.h Introduces NestedGroup write provider integration and stats merging hooks
be/src/olap/rowset/segment_v2/variant/variant_column_writer_impl.cpp Wires NestedGroup provider into write pipeline; stats merge + writer refactors
be/src/olap/rowset/segment_v2/variant/variant_column_reader.h Adds NestedGroup reader structs and planning hooks
be/src/olap/rowset/segment_v2/variant/offset_manager_impl.h New shared implementation for offset padding/reading utilities
be/src/olap/rowset/segment_v2/variant/offset_manager.h New offset manager interface for NestedGroup offset handling
be/src/olap/rowset/segment_v2/variant/nested_offsets_mapping_index.h New mapping index interface + reader/writer declarations
be/src/olap/rowset/segment_v2/variant/nested_offsets_mapping_index.cpp Implements nested offsets mapping index build/read/map logic
be/src/olap/rowset/segment_v2/variant/nested_group_provider.h Defines NestedGroup provider interfaces, filters, and factories
be/src/olap/rowset/segment_v2/variant/nested_group_provider.cpp Default CE providers (no-op/disabled) + default path matching
be/src/olap/rowset/segment_v2/variant/nested_group_path.h New helpers/constants for nested-group path encoding
be/src/olap/rowset/segment_v2/variant/hierarchical_data_iterator.cpp Skips NestedGroup subcolumns in hierarchical merge; adds debug checks
be/src/olap/rowset/segment_v2/segment_iterator.cpp Uses full path for extracted column field_name; updates inverted-index type inference; passes segment/iter opts into IndexExecContext
be/src/olap/rowset/segment_v2/index_writer.cpp Uses column path when constructing extracted-column field_name
be/src/olap/rowset/segment_v2/index_file_writer.cpp Include tweak for atomic usage
be/src/olap/rowset/segment_v2/column_writer.h Adds NestedGroup provider/stats members for variant writers
be/src/olap/rowset/segment_v2/column_reader_cache.cpp Removes stray preprocessor character
be/src/olap/rowset/segment_v2/column_reader.h Exposes lazy-loading accessors for zone-map and ordinal indexes
be/src/olap/rowset/segment_v2/column_reader.cpp Implements lazy-loading accessors; recognizes new index type in init
be/src/olap/rowset/segment_creator.cpp Minor header/include cleanup and param renames
be/src/common/config.h Adds config knob for max nested group depth
be/src/common/config.cpp Defines default for nested group max depth
Comments suppressed due to low confidence (1)

be/src/vec/json/json_parser.cpp:35

  • json_parser.cpp references config::variant_max_json_key_length but no longer includes common/config.h, so this should fail to compile with config undefined. Add back the #include "common/config.h" (keep the IWYU pragma if needed).

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

@eldenmoon eldenmoon changed the title Feat nested commit [feat](Variant) Support NestedGroup for variant columns with search DSL NESTED clause Feb 26, 2026
@eldenmoon eldenmoon requested a review from Copilot February 26, 2026 09:22
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

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


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

Comment on lines +1039 to +1040
uint32_t idx =
static_cast<uint32_t>(atoi(rel_str.substr(bucket_prefix.size()).c_str()));
Copy link

Copilot AI Feb 26, 2026

Choose a reason for hiding this comment

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

The cast to uint32_t from int could be unsafe if atoi returns a negative value or the parsed integer is larger than UINT32_MAX. Consider using std::stoul with error handling instead of atoi, or add validation to ensure the parsed value is within valid range.

Copilot uses AI. Check for mistakes.
if (rel_str.find(DOC_VALUE_COLUMN_PATH) != std::string::npos) {
size_t bucket = rel_str.rfind('b');
int bucket_value = std::stoi(rel_str.substr(bucket + 1));
uint32_t bucket_value = static_cast<uint32_t>(std::stoi(rel_str.substr(bucket + 1)));
Copy link

Copilot AI Feb 26, 2026

Choose a reason for hiding this comment

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

Similar to line 1040, this cast from stoi result to uint32_t is potentially unsafe. The stoi function can throw exceptions for invalid input and may return negative values. Consider using std::stoul with proper error handling or add validation checks.

Copilot uses AI. Check for mistakes.
Comment on lines +323 to +324
CHECK(column->size() == nrows) << "column->size()=" << column->size() << ", nrows=" << nrows
<< ", path=" << node.path.get_path();
Copy link

Copilot AI Feb 26, 2026

Choose a reason for hiding this comment

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

The CHECK macro will cause the program to abort on failure. For production code, consider using a more graceful error handling approach that returns a Status error instead of aborting the process, unless data corruption is guaranteed and aborting is the safest option.

Suggested change
CHECK(column->size() == nrows) << "column->size()=" << column->size() << ", nrows=" << nrows
<< ", path=" << node.path.get_path();
if (column->size() != nrows) {
return Status::InternalError(
"Column size {} not equal to nrows {} at path {}",
column->size(), nrows, node.path.get_path());
}

Copilot uses AI. Check for mistakes.
Comment on lines +629 to +631
const std::unordered_map<std::string, int>& field_name_to_column_id,
std::shared_ptr<roaring::Roaring>& result_bitmap) const {
(void)field_name_to_column_id;
Copy link

Copilot AI Feb 26, 2026

Choose a reason for hiding this comment

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

The field_name_to_column_id parameter is marked with (void) to suppress unused warnings, but it's passed through the call chain. If this parameter is intended for future use, add a TODO comment explaining its purpose. If it's truly unused, consider removing it from the function signature to reduce complexity.

Suggested change
const std::unordered_map<std::string, int>& field_name_to_column_id,
std::shared_ptr<roaring::Roaring>& result_bitmap) const {
(void)field_name_to_column_id;
[[maybe_unused]] const std::unordered_map<std::string, int>& field_name_to_column_id,
std::shared_ptr<roaring::Roaring>& result_bitmap) const {
// TODO: Use field_name_to_column_id to map nested field names to column IDs
// when evaluating nested queries, so that nested_path and its children
// can be resolved consistently with the outer query.

Copilot uses AI. Check for mistakes.
@eldenmoon
Copy link
Member Author

run buildall

@hello-stephen
Copy link
Contributor

Cloud UT Coverage Report

Increment line coverage 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 79.33% (1796/2264)
Line Coverage 64.83% (32020/49393)
Region Coverage 65.55% (15984/24383)
Branch Coverage 56.03% (8498/15168)

@doris-robot
Copy link

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

------ Round 1 ----------------------------------
============================================
q1	17708	4499	4350	4350
q2	q3	10735	811	537	537
q4	4742	359	260	260
q5	8202	1203	1020	1020
q6	237	180	148	148
q7	815	862	669	669
q8	10765	1501	1325	1325
q9	6766	4742	4748	4742
q10	6888	1895	1621	1621
q11	466	259	239	239
q12	758	568	474	474
q13	17802	4216	3435	3435
q14	226	232	229	229
q15	976	806	789	789
q16	730	715	684	684
q17	735	812	460	460
q18	6019	5771	5275	5275
q19	1193	987	621	621
q20	509	507	384	384
q21	4538	1848	1380	1380
q22	336	283	244	244
Total cold run time: 101146 ms
Total hot run time: 28886 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	4532	4330	4356	4330
q2	q3	1797	2184	1732	1732
q4	863	1176	773	773
q5	4013	4384	4319	4319
q6	178	177	140	140
q7	1726	1626	1490	1490
q8	2420	2679	2548	2548
q9	8004	7558	7345	7345
q10	2669	2835	2423	2423
q11	509	436	413	413
q12	514	589	465	465
q13	3991	4615	3573	3573
q14	279	324	289	289
q15	874	814	822	814
q16	723	748	707	707
q17	1175	1706	1347	1347
q18	7007	6832	6703	6703
q19	946	839	937	839
q20	2096	2261	2045	2045
q21	4023	3461	3329	3329
q22	454	437	381	381
Total cold run time: 48793 ms
Total hot run time: 46005 ms

@doris-robot
Copy link

TPC-DS: Total hot run time: 183590 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 d71cce408225995e8677ec4d6b02996b11735eab, data reload: false

query5	4924	653	516	516
query6	328	222	226	222
query7	4213	484	272	272
query8	367	247	235	235
query9	8732	2788	2743	2743
query10	543	378	326	326
query11	17012	17804	17083	17083
query12	205	144	137	137
query13	1321	511	383	383
query14	7736	3406	3057	3057
query14_1	2925	2954	2879	2879
query15	216	202	182	182
query16	1090	520	467	467
query17	1254	734	642	642
query18	2834	477	374	374
query19	231	266	188	188
query20	137	142	132	132
query21	227	166	150	150
query22	5373	5209	4949	4949
query23	17283	16818	16658	16658
query23_1	16704	16719	16631	16631
query24	6889	1598	1218	1218
query24_1	1202	1248	1233	1233
query25	569	486	436	436
query26	1240	307	150	150
query27	2707	461	291	291
query28	4479	1877	1900	1877
query29	781	542	486	486
query30	304	243	204	204
query31	895	724	644	644
query32	78	71	65	65
query33	510	326	273	273
query34	901	907	555	555
query35	633	668	589	589
query36	1065	1110	1056	1056
query37	134	90	79	79
query38	2958	3031	2841	2841
query39	881	868	845	845
query39_1	872	807	837	807
query40	230	149	136	136
query41	63	59	57	57
query42	102	98	99	98
query43	372	390	346	346
query44	
query45	198	192	182	182
query46	887	975	614	614
query47	2142	2115	2045	2045
query48	307	307	231	231
query49	618	450	369	369
query50	689	271	212	212
query51	4118	4113	4011	4011
query52	104	106	97	97
query53	286	329	281	281
query54	288	298	258	258
query55	87	84	80	80
query56	313	312	299	299
query57	1382	1322	1264	1264
query58	279	271	270	270
query59	2602	2692	2562	2562
query60	328	328	312	312
query61	156	153	152	152
query62	636	603	544	544
query63	324	283	275	275
query64	4825	1287	1026	1026
query65	
query66	1374	449	346	346
query67	16407	16412	16206	16206
query68	
query69	393	312	284	284
query70	1009	974	912	912
query71	335	307	285	285
query72	2750	2626	2421	2421
query73	542	552	323	323
query74	10002	9888	9713	9713
query75	2886	2765	2499	2499
query76	2305	1061	665	665
query77	355	426	299	299
query78	11240	11570	10714	10714
query79	1144	807	599	599
query80	1343	621	523	523
query81	558	291	249	249
query82	992	153	120	120
query83	361	255	258	255
query84	251	116	97	97
query85	885	481	428	428
query86	409	312	291	291
query87	3124	3095	2997	2997
query88	3578	2684	2680	2680
query89	444	371	343	343
query90	2022	176	170	170
query91	165	150	131	131
query92	76	75	72	72
query93	953	833	506	506
query94	647	309	296	296
query95	587	389	322	322
query96	630	513	232	232
query97	2444	2477	2419	2419
query98	231	218	218	218
query99	1004	998	909	909
Total cold run time: 255064 ms
Total hot run time: 183590 ms

@eldenmoon
Copy link
Member Author

run buildall

@hello-stephen
Copy link
Contributor

Cloud UT Coverage Report

Increment line coverage 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 79.33% (1796/2264)
Line Coverage 64.82% (32019/49393)
Region Coverage 65.52% (15976/24383)
Branch Coverage 56.03% (8499/15168)

@doris-robot
Copy link

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

------ Round 1 ----------------------------------
============================================
q1	16556	4473	4319	4319
q2	q3	10266	788	526	526
q4	4598	371	254	254
q5	7575	1224	1028	1028
q6	173	183	147	147
q7	782	849	678	678
q8	9468	1474	1311	1311
q9	4814	4725	4709	4709
q10	6744	1882	1634	1634
q11	460	264	248	248
q12	720	568	482	482
q13	17761	4218	3441	3441
q14	236	233	208	208
q15	922	798	793	793
q16	724	731	678	678
q17	739	868	431	431
q18	6307	5422	5238	5238
q19	1130	987	592	592
q20	531	500	390	390
q21	4582	2024	1460	1460
q22	432	310	273	273
Total cold run time: 95520 ms
Total hot run time: 28840 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	4727	4553	4613	4553
q2	q3	1793	2231	1739	1739
q4	852	1192	769	769
q5	4037	4376	4289	4289
q6	192	174	146	146
q7	1784	1675	1506	1506
q8	2467	2870	2518	2518
q9	7465	7437	7372	7372
q10	2673	2853	2406	2406
q11	537	452	419	419
q12	505	602	460	460
q13	3929	4386	3592	3592
q14	270	297	266	266
q15	841	810	849	810
q16	733	774	741	741
q17	1191	1511	1335	1335
q18	7216	6697	6648	6648
q19	902	894	876	876
q20	2107	2208	2028	2028
q21	3958	3585	3360	3360
q22	478	433	395	395
Total cold run time: 48657 ms
Total hot run time: 46228 ms

@doris-robot
Copy link

TPC-DS: Total hot run time: 183630 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 5e66e1acfcd0f059d991858bb4d7420f1667bc39, data reload: false

query5	4912	620	531	531
query6	338	234	207	207
query7	4216	471	281	281
query8	331	250	246	246
query9	8731	2815	2754	2754
query10	533	369	323	323
query11	16962	17351	17045	17045
query12	182	136	122	122
query13	1301	482	372	372
query14	6528	3377	3092	3092
query14_1	3020	2953	2820	2820
query15	220	200	190	190
query16	996	506	452	452
query17	1567	756	632	632
query18	3022	458	345	345
query19	204	207	176	176
query20	147	130	127	127
query21	216	136	114	114
query22	4908	4874	4971	4874
query23	17161	16761	16558	16558
query23_1	16724	16677	16656	16656
query24	7040	1607	1223	1223
query24_1	1222	1231	1217	1217
query25	538	449	410	410
query26	1238	256	148	148
query27	2812	461	295	295
query28	4382	1899	1903	1899
query29	829	569	467	467
query30	307	241	208	208
query31	873	719	639	639
query32	80	74	68	68
query33	525	318	283	283
query34	923	891	562	562
query35	628	697	604	604
query36	1019	1097	926	926
query37	133	94	79	79
query38	2955	2886	2864	2864
query39	916	905	835	835
query39_1	816	829	811	811
query40	228	153	135	135
query41	66	58	59	58
query42	109	108	105	105
query43	381	381	353	353
query44	
query45	195	185	180	180
query46	886	976	601	601
query47	2112	2149	2035	2035
query48	308	315	230	230
query49	625	461	368	368
query50	691	279	218	218
query51	4053	4049	4001	4001
query52	106	108	98	98
query53	289	339	278	278
query54	292	262	253	253
query55	90	83	81	81
query56	321	319	307	307
query57	1355	1335	1278	1278
query58	302	274	267	267
query59	2645	2675	2545	2545
query60	343	334	327	327
query61	154	155	154	154
query62	624	586	535	535
query63	321	279	272	272
query64	4814	1405	1125	1125
query65	
query66	1417	467	373	373
query67	16477	16437	16425	16425
query68	
query69	402	317	302	302
query70	989	974	994	974
query71	349	318	309	309
query72	3014	2813	2422	2422
query73	540	542	333	333
query74	9990	9899	9719	9719
query75	2853	2753	2429	2429
query76	2113	1026	676	676
query77	355	393	324	324
query78	11362	11549	10691	10691
query79	1148	809	607	607
query80	1574	608	531	531
query81	574	280	256	256
query82	964	148	114	114
query83	349	254	247	247
query84	249	122	97	97
query85	1167	496	445	445
query86	418	307	294	294
query87	3136	3070	2959	2959
query88	3566	2723	2664	2664
query89	430	364	354	354
query90	1902	182	171	171
query91	185	160	137	137
query92	85	70	68	68
query93	1046	869	509	509
query94	638	314	323	314
query95	589	339	391	339
query96	631	507	233	233
query97	2459	2495	2382	2382
query98	248	220	211	211
query99	1006	1010	889	889
Total cold run time: 255047 ms
Total hot run time: 183630 ms

@hello-stephen
Copy link
Contributor

BE UT Coverage Report

Increment line coverage 52.04% (549/1055) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 52.58% (19625/37321)
Line Coverage 36.22% (183366/506302)
Region Coverage 32.53% (142272/437369)
Branch Coverage 33.46% (61675/184328)

@hello-stephen
Copy link
Contributor

BE Regression && UT Coverage Report

Increment line coverage 60.92% (608/998) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 71.51% (26134/36545)
Line Coverage 54.33% (274218/504752)
Region Coverage 51.85% (228935/441510)
Branch Coverage 53.09% (98153/184892)

@eldenmoon
Copy link
Member Author

run buildall

@doris-robot
Copy link

Cloud UT Coverage Report

Increment line coverage 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 79.33% (1796/2264)
Line Coverage 64.79% (32003/49393)
Region Coverage 65.51% (15974/24383)
Branch Coverage 55.99% (8493/15168)

@doris-robot
Copy link

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

------ Round 1 ----------------------------------
============================================
q1	16531	4512	4278	4278
q2	q3	10205	774	521	521
q4	4541	359	252	252
q5	7479	1205	1012	1012
q6	176	176	147	147
q7	801	831	661	661
q8	9387	1485	1349	1349
q9	4768	4734	4651	4651
q10	6760	1874	1617	1617
q11	451	265	247	247
q12	689	567	471	471
q13	17577	4269	3430	3430
q14	229	229	222	222
q15	946	797	798	797
q16	721	740	683	683
q17	703	871	428	428
q18	5980	5354	5158	5158
q19	1280	970	633	633
q20	508	486	387	387
q21	4408	1854	1399	1399
q22	338	291	240	240
Total cold run time: 94478 ms
Total hot run time: 28583 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	4482	4373	4347	4347
q2	q3	1754	2196	1737	1737
q4	840	1155	780	780
q5	3991	4315	4294	4294
q6	184	174	141	141
q7	1727	1623	1478	1478
q8	2411	2655	2523	2523
q9	7163	7906	7370	7370
q10	2631	2916	2387	2387
q11	504	429	411	411
q12	495	601	460	460
q13	3959	4427	3586	3586
q14	281	290	269	269
q15	927	906	809	809
q16	750	794	719	719
q17	1166	1576	1324	1324
q18	7187	6793	6707	6707
q19	890	902	882	882
q20	2053	2130	1994	1994
q21	3957	3463	3264	3264
q22	497	497	386	386
Total cold run time: 47849 ms
Total hot run time: 45868 ms

@doris-robot
Copy link

TPC-DS: Total hot run time: 184918 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 922ae430ce32c6db3880050c0eb3959170a6819b, data reload: false

query5	5224	629	500	500
query6	336	218	200	200
query7	4217	458	274	274
query8	330	239	228	228
query9	8747	2774	2718	2718
query10	552	365	352	352
query11	16951	17494	17124	17124
query12	260	131	123	123
query13	1557	458	350	350
query14	6860	3286	3100	3100
query14_1	2915	2901	2971	2901
query15	204	196	177	177
query16	977	503	492	492
query17	1293	750	648	648
query18	3029	463	364	364
query19	229	220	210	210
query20	153	152	163	152
query21	244	149	120	120
query22	5804	5672	5591	5591
query23	17656	17273	17059	17059
query23_1	16830	16767	16685	16685
query24	6931	1688	1239	1239
query24_1	1232	1223	1212	1212
query25	558	487	446	446
query26	1237	267	151	151
query27	2749	482	283	283
query28	4369	1901	1891	1891
query29	802	574	495	495
query30	312	243	211	211
query31	884	716	647	647
query32	86	71	76	71
query33	550	319	284	284
query34	916	913	548	548
query35	649	678	594	594
query36	1115	1130	1030	1030
query37	122	89	83	83
query38	2911	2942	2897	2897
query39	880	849	859	849
query39_1	818	830	823	823
query40	223	149	135	135
query41	65	58	57	57
query42	107	102	99	99
query43	385	390	362	362
query44	
query45	196	195	180	180
query46	875	989	606	606
query47	2140	2189	2087	2087
query48	315	321	244	244
query49	618	462	399	399
query50	683	272	227	227
query51	4131	4081	4061	4061
query52	104	105	94	94
query53	284	333	283	283
query54	288	262	257	257
query55	85	85	80	80
query56	308	300	304	300
query57	1351	1366	1294	1294
query58	285	271	268	268
query59	2524	2612	2516	2516
query60	344	336	319	319
query61	145	144	143	143
query62	605	581	534	534
query63	300	275	274	274
query64	4719	1271	1006	1006
query65	
query66	1373	461	357	357
query67	16306	16273	16288	16273
query68	
query69	388	298	291	291
query70	1026	978	884	884
query71	346	305	298	298
query72	2795	2694	2465	2465
query73	545	541	326	326
query74	9958	9904	9740	9740
query75	2835	2752	2437	2437
query76	2126	1036	674	674
query77	380	393	303	303
query78	11284	11621	10723	10723
query79	3151	791	594	594
query80	1800	613	543	543
query81	583	281	248	248
query82	936	152	113	113
query83	353	258	233	233
query84	260	123	95	95
query85	939	481	431	431
query86	447	302	295	295
query87	3122	3052	2997	2997
query88	3576	2689	2672	2672
query89	427	368	343	343
query90	2010	194	168	168
query91	169	156	134	134
query92	81	75	74	74
query93	1884	875	506	506
query94	648	324	293	293
query95	560	342	318	318
query96	648	510	231	231
query97	2474	2497	2413	2413
query98	236	222	216	216
query99	998	988	912	912
Total cold run time: 258788 ms
Total hot run time: 184918 ms

@doris-robot
Copy link

BE UT Coverage Report

Increment line coverage 52.04% (549/1055) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 52.54% (19607/37321)
Line Coverage 36.16% (183061/506302)
Region Coverage 32.49% (142088/437369)
Branch Coverage 33.43% (61615/184328)

@hello-stephen
Copy link
Contributor

BE Regression && UT Coverage Report

Increment line coverage 61.52% (614/998) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 73.20% (26750/36545)
Line Coverage 56.51% (285244/504752)
Region Coverage 54.05% (238647/441510)
Branch Coverage 55.66% (102903/184892)

@eldenmoon
Copy link
Member Author

skip check_coverage

1 similar comment
@eldenmoon
Copy link
Member Author

skip check_coverage

zzzxl1993
zzzxl1993 previously approved these changes Feb 27, 2026
Copy link
Contributor

@zzzxl1993 zzzxl1993 left a comment

Choose a reason for hiding this comment

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

LGTM

@github-actions github-actions bot added the approved Indicates a PR has been approved by one committer. label Feb 27, 2026
@github-actions
Copy link
Contributor

PR approved by at least one committer and no changes requested.

@github-actions
Copy link
Contributor

PR approved by anyone and no changes requested.

@eldenmoon eldenmoon added dev/4.1.x and removed approved Indicates a PR has been approved by one committer. labels Feb 27, 2026
zclllyybb
zclllyybb previously approved these changes Feb 28, 2026
@eldenmoon eldenmoon dismissed stale reviews from zclllyybb and zzzxl1993 via af5b0ed February 28, 2026 02:06
@eldenmoon
Copy link
Member Author

run buildall

@hello-stephen
Copy link
Contributor

Cloud UT Coverage Report

Increment line coverage 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 79.33% (1796/2264)
Line Coverage 64.79% (32000/49393)
Region Coverage 65.50% (15971/24383)
Branch Coverage 55.97% (8490/15168)

@hello-stephen
Copy link
Contributor

FE UT Coverage Report

Increment line coverage 64.85% (155/239) 🎉
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.

6 participants