Skip to content

[improvement](parquet) Fuse nested sparse selection planning - #66263

Merged
Gabriel39 merged 2 commits into
apache:masterfrom
Gabriel39:fix/parquet-v2-nested-sparse-selection
Jul 30, 2026
Merged

[improvement](parquet) Fuse nested sparse selection planning#66263
Gabriel39 merged 2 commits into
apache:masterfrom
Gabriel39:fix/parquet-v2-nested-sparse-selection

Conversation

@Gabriel39

@Gabriel39 Gabriel39 commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

What problem does this PR solve?

Issue Number: N/A

Related PR: #65674

Problem Summary:

Parquet V2 repeated leaves currently rebuild a parent-row filter into a level-entry filter, scan definition levels into null runs plus an ancestor-null hash set, build the leaf selection, and scan the levels again to compact surviving parent shapes. This fixed O(level entries) work is especially visible when only 1% or 10% of parent rows survive.

This change adds a single-pass nested selection builder. It maps parent filters to repeated entries, classifies ancestor and leaf nulls, builds the decoder selection, appends selected nulls, and compacts repetition/definition levels in place. Ancestor-null placeholders remain in the surviving parent shape but do not consume leaf selection entries. Unfiltered and fully filtered paths keep their existing behavior.

Correctness coverage

  • A real Parquet reader test writes MAP and STRUCT-with-LIST columns whose repeated leaves continue across physical data pages. It partially filters the first reader batch, covers rejected and selected ancestor/leaf nulls, then checks every surviving key/value/element, offsets, null maps, and the STRUCT sibling column.
  • The test decodes the first repetition level of every physical page and requires continuation pages (rep > 0) for MAP keys, MAP values, and LIST elements, so the fixture cannot silently regress to row-boundary-only pages.
  • The microbenchmark now checks both measured implementations against an independent source-level oracle before timing. It verifies compacted repetition/definition levels, selected nulls, ancestor and filtered counts, and the four-way content/null/filtered-content/filtered-null read sequence.

Reproducible microbenchmark

The benchmark retains the pre-fusion impl_legacy path and the optimized impl_fused path in the same Release binary. Both use the same generated levels, filter, compiler, and process setup. The scenario matrix contains six shapes for each implementation (12 nested-selection cases total).

Environment: Clang 20.1.8, Linux 5.14, Release build, Intel Xeon Platinum 8457C (2 sockets, 48 cores/socket, SMT enabled), pinned to logical CPU 71. CPU scaling was enabled. The host load averages at the four process starts were 535.98, 594.98, 610.33, and 640.04, so these CPU-time results demonstrate the same-binary delta but are not presented as an isolated performance gate.

Exact build and ABBA commands (three untimed --benchmark_min_time=0.1s warmups were run first):

./build.sh --benchmark -j128

taskset -c 71 be/output/lib/benchmark_test \
  --benchmark_filter='^ParquetKernel/nested_selection/.*/impl_legacy$' \
  --benchmark_min_time=1s --benchmark_repetitions=10 \
  --benchmark_report_aggregates_only=true \
  --benchmark_out=legacy-a1.json --benchmark_out_format=json

taskset -c 71 be/output/lib/benchmark_test \
  --benchmark_filter='^ParquetKernel/nested_selection/.*/impl_fused$' \
  --benchmark_min_time=1s --benchmark_repetitions=10 \
  --benchmark_report_aggregates_only=true \
  --benchmark_out=fused-b1.json --benchmark_out_format=json

taskset -c 71 be/output/lib/benchmark_test \
  --benchmark_filter='^ParquetKernel/nested_selection/.*/impl_fused$' \
  --benchmark_min_time=1s --benchmark_repetitions=10 \
  --benchmark_report_aggregates_only=true \
  --benchmark_out=fused-b2.json --benchmark_out_format=json

taskset -c 71 be/output/lib/benchmark_test \
  --benchmark_filter='^ParquetKernel/nested_selection/.*/impl_legacy$' \
  --benchmark_min_time=1s --benchmark_repetitions=10 \
  --benchmark_report_aggregates_only=true \
  --benchmark_out=legacy-a2.json --benchmark_out_format=json

Raw ABBA median CPU times from the four JSON outputs (milliseconds; speedup uses the mean of the two medians per implementation):

Parent survivors Pattern Legacy A1 Fused B1 Fused B2 Legacy A2 Speedup
1% clustered 5.614 2.630 2.571 5.536 2.14x
1% alternating 5.649 2.649 2.617 5.463 2.11x
10% clustered 5.246 2.672 2.573 5.657 2.08x
10% alternating 5.521 2.661 2.638 5.631 2.10x
50% clustered 5.791 2.976 2.922 5.853 1.97x
50% alternating 5.729 3.064 3.030 5.728 1.88x

Verification

  • 15 focused ASAN unit tests passed, including native selection, scenario-matrix invariants, pending lazy-skip boundaries, and the real reader continuation-page case.
  • Release benchmark_test built successfully and all 12 nested-selection cases completed without oracle errors.
  • Registration counts: 228 decoder, 92 kernel, and 167 reader cases.

Release note

Improve Parquet V2 sparse reads of nested and repeated columns by reducing selection reconstruction work.

Check List (For Author)

  • Test
    • Regression test
    • Unit Test
    • Manual test (Release microbenchmark detailed above)
    • No need to test or manual test. Explain why:
  • Behavior changed:
    • No. The change preserves nested row shape and leaf cursor semantics.
    • Yes.
  • Does this need documentation?
    • No.
    • Yes. The benchmark README and matrix counts document the reproducible comparison path.

### What problem does this PR solve?

Issue Number: N/A

Related PR: apache#65674

Problem Summary: Parquet V2 repeated leaves rebuilt parent-row filters, null runs, ancestor-null state, leaf selections, and compacted level streams in separate passes. Fuse these operations into one pass while preserving nested parent shape and physical leaf cursor semantics. Release microbenchmarks improve CPU time by 1.79x to 2.27x across 1%, 10%, and 50% parent-row survivor rates.

### Release note

Improve Parquet V2 sparse reads of nested and repeated columns by reducing selection reconstruction work.

### Check List (For Author)

- Test: Unit Test and manual Release microbenchmark
- Behavior changed: No
- Does this need documentation: No
@hello-stephen

Copy link
Copy Markdown
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?

@Gabriel39

Copy link
Copy Markdown
Contributor Author

run buildall

@Gabriel39

Copy link
Copy Markdown
Contributor Author

/review

@Gabriel39
Gabriel39 marked this pull request as ready for review July 30, 2026 06:09
@Gabriel39
Gabriel39 requested a review from yiguolei as a code owner July 30, 2026 06:09
@hello-stephen

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

------ Round 1 ----------------------------------
============================================
q1	17683	4025	4009	4009
q2	2004	313	207	207
q3	10287	1399	812	812
q4	4683	472	338	338
q5	7554	849	570	570
q6	180	169	138	138
q7	781	842	616	616
q8	9337	1607	1572	1572
q9	5618	4412	4381	4381
q10	6747	1730	1442	1442
q11	508	385	338	338
q12	720	583	457	457
q13	18075	3452	2773	2773
q14	266	267	244	244
q15	q16	787	768	721	721
q17	982	1030	1066	1030
q18	7049	5691	5482	5482
q19	1292	1269	1117	1117
q20	770	696	582	582
q21	6006	2648	2487	2487
q22	432	355	296	296
Total cold run time: 101761 ms
Total hot run time: 29612 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	4348	4297	4303	4297
q2	288	322	218	218
q3	4599	4964	4399	4399
q4	2058	2141	1350	1350
q5	4385	4318	4337	4318
q6	233	175	132	132
q7	1759	1874	1830	1830
q8	2588	2153	2176	2153
q9	8087	8105	7782	7782
q10	4692	4626	4203	4203
q11	559	423	384	384
q12	783	794	543	543
q13	3253	3639	2959	2959
q14	304	326	289	289
q15	q16	750	729	665	665
q17	1345	1331	1307	1307
q18	7816	7344	7309	7309
q19	1201	1161	1165	1161
q20	2202	2206	1925	1925
q21	5199	4486	4348	4348
q22	513	478	392	392
Total cold run time: 56962 ms
Total hot run time: 51964 ms

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Automated review completed for head 5239636ff6340407a4d5abedf84fa0b11dcedb9a.

Four actionable review issues are reported inline: the production nested partial-filter path lacks end-to-end boundary coverage; the new microbenchmark does not independently validate its output; the before/after performance claim lacks a reproducible baseline/artifact record; and the refreshed benchmark guide retains a stale reader-case count.

Critical checkpoint conclusions:

  • Goal and correctness: The change is a focused one-pass fusion of parent filtering, leaf null classification, decoder selection, and level compaction. Main and independent risk-review differential models matched the old algorithm in 200,000 and 300,000 generated segmented cases, and the production cursor/shape trace found no implementation defect. The missing real-reader integration test still leaves the changed caller/page/complex-reconstruction boundary unproved.
  • Scope, concurrency, and lifecycle: The patch is localized and introduces no shared concurrency, locks, threads, static initialization, ownership cycle, or configuration. Existing persistent reader scratch is reset and reused within the established row-group lifecycle.
  • Data, NULL, and error semantics: Ancestor placeholders, leaf logical entries, encoded non-null payload, selected output, and conversion-failure null bits remain separately accounted; new status failures propagate. No transaction, persistence, storage-write, visibility, delete-bitmap, or FE-BE propagation path is involved.
  • Compatibility and parallel paths: No wire/storage-format compatibility change is introduced. Identity and fully filtered inputs retain their existing paths; partial nested filters use the fused path. ARRAY/MAP/STRUCT sibling and parent-shape consumers were traced without finding another defect.
  • Tests and results: Added helper tests cover local compaction and a nonzero segment start, but not the full physical reader/page/complex output boundary. The benchmark matrix count of 86 is consistent, while its correctness check and the guide's reader count are not. No local build or test was run because the authoritative review instructions prohibit builds in this runner.
  • Performance and observability: Setup restoration is outside the timed region, the fused helper is the measured work, scratch is reused, and _decode_null_map_time attribution remains intact. The summarized speedup cannot be independently reproduced from the submitted revisions without the missing baseline patch/environment/raw data.
  • User focus: No additional user-provided review focus was supplied; the complete PR was reviewed.

Outcome: request changes for the four inline items. Apart from those coverage, benchmark-evidence, and documentation issues, no additional production correctness defect was substantiated.

EXPECT_EQ(filter, nullptr);
}

TEST(NativeNestedSelectionTest, BuildsSelectionAndCompactsSurvivingParentLevels) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[P1] Exercise the fused path through a real nested reader

These new tests call init_nested() directly, but the production change also depends on _read_nested_column() supplying the right batch or continuation filter index, materialize_values() and the ancestor-only skip advancing the page cursor exactly, and ARRAY/MAP/STRUCT consumers rebuilding the compacted shape. A partial-filter bug in any of those boundaries can shift later values or corrupt offsets while both helper tests still pass. Please add an end-to-end Parquet reader case with a partially filtered batch, selected and rejected ancestor/leaf NULLs, a parent spanning pages, and follow-up output that verifies exact values, offsets, and null maps (including sibling shape for MAP/STRUCT).

/*repeated_parent_def_level=*/2,
/*definition_level=*/3, &selected_nulls, &parent_filter, 0,
&ancestor_null_count);
if (!status.ok() || repetition_levels.size() != definition_levels.size() ||

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[P2] Validate nested-selection output before timing it

These checks cannot catch the kernel keeping the wrong parents or emitting incorrect null/read runs: the two level vectors are resized together, and every source entry necessarily contributes to either num_values() or ancestor_null_count. The existing kernel benchmarks compare representative output with an independent oracle before timing. Please build the expected compacted repetition/definition levels, selected null map, filtered count, and four-way read sequence independently and compare them here before publishing timings.

constexpr size_t KERNEL_ROWS = 1UL << 16;
constexpr size_t NESTED_VALUES_PER_ROW = 8;

inline void run_nested_selection_kernel(benchmark::State& state, const KernelScenario& scenario) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[P2] Make the before/after result reproducible

This benchmark and the fused implementation are introduced together, so the base revision cannot run ParquetKernel/nested_selection and the head exposes only the new path. The summary table therefore cannot be reproduced without an unsubmitted benchmark-only baseline. Per this directory's benchmark guide, please provide the exact baseline patch/commit and command, compiler/CPU/cache environment, and raw ABBA JSON (or retain selectable legacy and fused implementations in the harness) so the claimed 1.79x-2.27x result can be verified.

Comment thread be/benchmark/parquet/AGENTS.md Outdated
## Current validation record

The current expected registration counts are 228 decoder, 80 kernel, and 152 reader cases. A smoke
The current expected registration counts are 228 decoder, 86 kernel, and 152 reader cases. A smoke

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[P2] Keep the reader registration count in sync

This refreshed validation record still says ParquetReader has 152 cases, but ReaderMatrixCoversNullableSparseAndProjectionAxes now asserts reader_scenarios().size() == 167, and register_reader_benchmarks() registers every returned scenario. The list/count command above will therefore report 167 and contradict this review guide (the stale 152 also appears in the command comment and matrix description). Please update all three reader-count references to 167 while refreshing these totals.

@hello-stephen

Copy link
Copy Markdown
Contributor
TPC-DS: Total hot run time: 177618 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 5239636ff6340407a4d5abedf84fa0b11dcedb9a, data reload: false

query5	4382	647	480	480
query6	470	228	201	201
query7	4887	584	348	348
query8	339	194	177	177
query9	8759	4125	4107	4107
query10	478	364	306	306
query11	5825	2370	2130	2130
query12	161	97	99	97
query13	1325	560	422	422
query14	6220	5177	4868	4868
query14_1	4236	4261	4209	4209
query15	209	197	177	177
query16	999	477	470	470
query17	909	722	561	561
query18	2416	465	346	346
query19	208	196	142	142
query20	113	107	106	106
query21	230	161	153	153
query22	13609	13508	13411	13411
query23	17395	16493	16096	16096
query23_1	16264	16211	16262	16211
query24	7606	1823	1287	1287
query24_1	1332	1292	1305	1292
query25	580	457	400	400
query26	1340	351	223	223
query27	2606	634	392	392
query28	4535	2064	2023	2023
query29	1098	654	494	494
query30	335	259	238	238
query31	1115	1090	980	980
query32	114	64	67	64
query33	538	337	255	255
query34	1199	1210	669	669
query35	810	785	668	668
query36	1031	1033	864	864
query37	159	105	98	98
query38	1870	1722	1648	1648
query39	872	897	861	861
query39_1	846	825	840	825
query40	252	169	151	151
query41	69	68	76	68
query42	104	96	95	95
query43	331	326	286	286
query44	1447	784	787	784
query45	196	184	176	176
query46	1060	1171	770	770
query47	2079	2103	1985	1985
query48	412	425	306	306
query49	603	438	321	321
query50	1073	449	349	349
query51	10746	10669	10610	10610
query52	87	89	78	78
query53	255	281	207	207
query54	286	255	237	237
query55	81	72	69	69
query56	317	314	321	314
query57	1310	1257	1186	1186
query58	298	261	273	261
query59	1599	1652	1471	1471
query60	328	287	268	268
query61	218	152	153	152
query62	538	493	426	426
query63	244	208	205	205
query64	2829	1046	844	844
query65	4708	4675	4604	4604
query66	1825	494	393	393
query67	29335	29161	29093	29093
query68	3317	1610	1067	1067
query69	399	310	258	258
query70	880	816	797	797
query71	380	333	325	325
query72	3031	2740	2336	2336
query73	850	764	413	413
query74	5057	4950	4760	4760
query75	2556	2515	2129	2129
query76	2337	1180	772	772
query77	348	389	282	282
query78	11978	11978	11303	11303
query79	1421	1160	760	760
query80	1293	562	518	518
query81	518	340	285	285
query82	636	155	117	117
query83	375	327	303	303
query84	331	159	132	132
query85	978	620	521	521
query86	398	236	224	224
query87	1831	1811	1750	1750
query88	3747	2847	2830	2830
query89	437	364	338	338
query90	1901	198	195	195
query91	198	195	164	164
query92	64	61	59	59
query93	1751	1526	967	967
query94	712	355	310	310
query95	799	607	516	516
query96	1071	792	342	342
query97	2651	2621	2478	2478
query98	210	207	200	200
query99	1080	1114	976	976
Total cold run time: 263904 ms
Total hot run time: 177618 ms

@hello-stephen

Copy link
Copy Markdown
Contributor
ClickBench: Total hot run time: 24.76 s
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/clickbench-tools
ClickBench test result on commit 5239636ff6340407a4d5abedf84fa0b11dcedb9a, data reload: false

query1	0.01	0.00	0.01
query2	0.09	0.05	0.04
query3	0.26	0.13	0.13
query4	1.60	0.13	0.14
query5	0.24	0.22	0.23
query6	1.16	0.83	0.84
query7	0.04	0.01	0.01
query8	0.06	0.04	0.04
query9	0.39	0.30	0.30
query10	0.55	0.54	0.54
query11	0.20	0.14	0.13
query12	0.18	0.14	0.14
query13	0.46	0.46	0.48
query14	1.04	1.02	1.02
query15	0.62	0.59	0.60
query16	0.30	0.33	0.32
query17	1.09	1.12	1.09
query18	0.23	0.21	0.21
query19	2.00	1.95	1.98
query20	0.02	0.02	0.01
query21	15.44	0.22	0.15
query22	4.85	0.06	0.05
query23	16.14	0.31	0.12
query24	2.92	0.42	0.32
query25	0.10	0.05	0.04
query26	0.73	0.21	0.16
query27	0.05	0.03	0.03
query28	3.47	0.90	0.55
query29	12.49	4.17	3.30
query30	0.27	0.16	0.15
query31	2.77	0.57	0.32
query32	3.22	0.59	0.48
query33	3.24	3.14	3.27
query34	15.62	4.21	3.53
query35	3.51	3.51	3.52
query36	0.55	0.41	0.40
query37	0.09	0.06	0.06
query38	0.06	0.04	0.04
query39	0.04	0.02	0.02
query40	0.19	0.15	0.14
query41	0.09	0.03	0.02
query42	0.04	0.03	0.03
query43	0.05	0.04	0.04
Total cold run time: 96.47 s
Total hot run time: 24.76 s

@Gabriel39

Copy link
Copy Markdown
Contributor Author

run buildall

@Gabriel39

Copy link
Copy Markdown
Contributor Author

/review

@hello-stephen

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

------ Round 1 ----------------------------------
============================================
q1	17816	4079	4053	4053
q2	2006	311	195	195
q3	10299	1392	793	793
q4	4679	465	342	342
q5	7508	826	558	558
q6	181	166	136	136
q7	757	826	602	602
q8	9959	1668	1512	1512
q9	6007	4351	4329	4329
q10	6803	1707	1451	1451
q11	491	347	316	316
q12	756	571	468	468
q13	18116	3397	2702	2702
q14	261	271	239	239
q15	q16	786	773	702	702
q17	984	927	969	927
q18	6833	5690	5628	5628
q19	1220	1219	1038	1038
q20	824	697	583	583
q21	5680	2600	2395	2395
q22	436	359	299	299
Total cold run time: 102402 ms
Total hot run time: 29268 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	4525	4295	4311	4295
q2	293	313	211	211
q3	4526	4998	4348	4348
q4	2038	2121	1365	1365
q5	4348	4233	4250	4233
q6	229	177	128	128
q7	1737	1905	1794	1794
q8	2428	2165	2076	2076
q9	7754	7682	7700	7682
q10	4695	4647	4192	4192
q11	562	423	393	393
q12	737	745	525	525
q13	3417	3470	2949	2949
q14	305	321	285	285
q15	q16	708	751	647	647
q17	1328	1296	1290	1290
q18	8061	7243	7049	7049
q19	1066	1064	1103	1064
q20	2195	2186	1944	1944
q21	5180	4465	4355	4355
q22	504	459	404	404
Total cold run time: 56636 ms
Total hot run time: 51229 ms

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Automated review result: no new actionable findings at head e8e84487770d72f498760d3bdeb9e1e91455218e.

Critical checkpoint conclusions:

  • Goal and proof: the change replaces the partial-filter nested path with one pass that maps parent selection, classifies ancestor/leaf nulls, builds the four-way decoder plan, appends selected null bits, and compacts levels. Direct helper tests, an independent benchmark oracle, and the real MAP/STRUCT-with-LIST reader case prove the intended behavior.
  • Scope and clarity: the production change is focused on one internal selector plus its native nested-reader call site. Benchmark, matrix, documentation, and tests are directly related.
  • Data correctness and error handling: parent filter coordinates match the legacy path on first pages, V1 continuation fragments, later parents, and later batches. Selected/filtered content and NULL runs preserve logical and payload cursor counts; ancestor placeholders are skipped logically once; ARRAY/MAP/STRUCT receive the same compacted shape. Invalid bounds or inconsistent page/filter state return errors rather than continuing.
  • Concurrency and lifecycle: native column readers and their scratch are synchronously owned by one row-group scheduler path. No new shared state, locks, static initialization, ownership cycle, or cleanup path is introduced.
  • Compatibility and parallel paths: no storage format, FE/BE protocol, function symbol, configuration, persistence, transaction, or data-write contract changes. Partial filters use the fused path; unfiltered and fully filtered paths retain their existing behavior. Decoder encoding dispatch is unchanged.
  • Performance and observability: the same Release binary retains legacy and fused cases, validates both against an independent source-level oracle before timing, and documents ABBA commands. The reported host load is disclosed, so the numbers are evidence of the same-binary delta rather than an isolated gate. Fused work remains attributed to the existing decode/null-map timing.
  • Test coverage: registration counts are consistently 228 decoder, 92 kernel, and 167 reader cases. The reader fixture proves MAP key/value and LIST continuation pages, drives the selected wide parent through a partial filter, and verifies exact values, offsets, parent/leaf null maps, STRUCT sibling shape, and trailing cursor alignment. This review runner was explicitly review-only, so I did not run builds or tests; the PR records the author-run ASAN unit tests and Release benchmark cases.

Existing inline review concerns were rechecked against the current head: the real continuation-path test, independent oracle, selectable same-binary legacy/fused harness, ABBA instructions, and registration-count updates are now present.

User focus: no additional focus was provided; the complete PR was reviewed.

Review completion: Round 1 included two normal full-coverage reviews and a separate continuation/cursor risk review. All returned NO_NEW_VALUABLE_FINDINGS; every risk was resolved with code evidence, and the frozen inline comment set is empty.

@hello-stephen

Copy link
Copy Markdown
Contributor
TPC-DS: Total hot run time: 176924 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 e8e84487770d72f498760d3bdeb9e1e91455218e, data reload: false

query5	4308	624	477	477
query6	447	226	199	199
query7	4992	604	339	339
query8	336	185	168	168
query9	8735	4043	4034	4034
query10	500	359	309	309
query11	5943	2340	2111	2111
query12	159	105	98	98
query13	1252	588	428	428
query14	6248	5197	4869	4869
query14_1	4192	4175	4198	4175
query15	203	212	178	178
query16	1032	441	411	411
query17	1129	709	571	571
query18	2466	482	353	353
query19	216	188	154	154
query20	109	107	105	105
query21	231	164	140	140
query22	13534	13478	13355	13355
query23	17328	16581	16014	16014
query23_1	16202	16309	16267	16267
query24	7492	1753	1315	1315
query24_1	1291	1273	1262	1262
query25	567	467	389	389
query26	1334	360	211	211
query27	2563	580	381	381
query28	4417	2000	1963	1963
query29	1065	603	465	465
query30	329	260	236	236
query31	1138	1104	988	988
query32	105	61	66	61
query33	542	313	252	252
query34	1220	1141	649	649
query35	761	798	654	654
query36	1065	1053	882	882
query37	153	101	83	83
query38	1848	1713	1635	1635
query39	893	882	846	846
query39_1	832	858	844	844
query40	248	163	138	138
query41	65	62	61	61
query42	94	91	87	87
query43	320	317	276	276
query44	1413	773	752	752
query45	196	181	173	173
query46	1057	1158	751	751
query47	2175	2146	2074	2074
query48	385	413	293	293
query49	569	418	302	302
query50	1020	418	340	340
query51	10664	10516	10632	10516
query52	84	88	73	73
query53	261	279	200	200
query54	277	236	213	213
query55	74	69	67	67
query56	289	298	284	284
query57	1375	1323	1216	1216
query58	306	258	244	244
query59	1576	1640	1427	1427
query60	299	276	253	253
query61	153	150	148	148
query62	544	497	441	441
query63	243	199	198	198
query64	2811	1078	837	837
query65	4711	4634	4630	4630
query66	1804	491	374	374
query67	29258	29227	29112	29112
query68	3259	1607	999	999
query69	409	302	267	267
query70	921	834	808	808
query71	394	342	316	316
query72	3120	2663	2370	2370
query73	841	821	459	459
query74	5046	4906	4717	4717
query75	2530	2505	2125	2125
query76	2305	1160	779	779
query77	351	373	279	279
query78	11750	11852	11351	11351
query79	1248	1170	760	760
query80	646	564	464	464
query81	467	331	290	290
query82	374	156	117	117
query83	402	317	305	305
query84	275	157	130	130
query85	910	597	525	525
query86	335	243	228	228
query87	1826	1828	1768	1768
query88	3736	2832	2807	2807
query89	417	376	329	329
query90	1922	201	203	201
query91	203	193	165	165
query92	60	58	52	52
query93	1544	1458	986	986
query94	557	349	319	319
query95	772	592	486	486
query96	1078	780	347	347
query97	2646	2645	2516	2516
query98	218	216	206	206
query99	1083	1101	968	968
Total cold run time: 261427 ms
Total hot run time: 176924 ms

@hello-stephen

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

query1	0.01	0.00	0.01
query2	0.09	0.05	0.05
query3	0.25	0.14	0.13
query4	1.60	0.14	0.14
query5	0.26	0.22	0.22
query6	1.16	0.81	0.82
query7	0.05	0.01	0.00
query8	0.05	0.04	0.04
query9	0.38	0.32	0.30
query10	0.54	0.55	0.55
query11	0.19	0.14	0.14
query12	0.17	0.14	0.14
query13	0.48	0.46	0.48
query14	1.03	1.01	1.00
query15	0.60	0.59	0.60
query16	0.31	0.30	0.33
query17	1.09	1.08	1.06
query18	0.23	0.21	0.21
query19	2.03	1.90	1.94
query20	0.01	0.02	0.01
query21	15.40	0.23	0.13
query22	5.20	0.05	0.05
query23	16.94	0.30	0.12
query24	4.50	0.46	0.33
query25	0.12	0.06	0.04
query26	0.77	0.20	0.15
query27	0.04	0.04	0.04
query28	3.81	0.91	0.58
query29	13.59	4.20	3.34
query30	0.26	0.15	0.16
query31	2.77	0.59	0.31
query32	3.22	0.58	0.49
query33	3.15	3.21	3.15
query34	15.66	4.24	3.53
query35	3.51	3.54	3.55
query36	0.54	0.42	0.43
query37	0.08	0.06	0.07
query38	0.05	0.04	0.03
query39	0.04	0.03	0.03
query40	0.18	0.16	0.15
query41	0.08	0.03	0.03
query42	0.04	0.03	0.03
query43	0.04	0.04	0.03
Total cold run time: 100.52 s
Total hot run time: 24.78 s

@hello-stephen

Copy link
Copy Markdown
Contributor

BE Regression && UT Coverage Report

Increment line coverage 86.00% (86/100) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 75.75% (31986/42228)
Line Coverage 60.37% (356392/590347)
Region Coverage 56.89% (298609/524875)
Branch Coverage 58.29% (134444/230650)

@Gabriel39
Gabriel39 merged commit 93941b1 into apache:master Jul 30, 2026
32 checks passed
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.

3 participants