Skip to content

[feature](scan) Add value predicate pushdown control for MOR tables#60513

Open
dataroaring wants to merge 3 commits intomasterfrom
mor_value_predicate_pushdown_control
Open

[feature](scan) Add value predicate pushdown control for MOR tables#60513
dataroaring wants to merge 3 commits intomasterfrom
mor_value_predicate_pushdown_control

Conversation

@dataroaring
Copy link
Contributor

@dataroaring dataroaring commented Feb 4, 2026

Summary

  • Add session variable enable_mor_value_predicate_pushdown_tables to control value column predicate pushdown for MOR (Merge-On-Read) tables
  • FE: session variable with table-list matching (db.table, table, or *), thrift flag on TOlapScanNode, isMorTable() helper on OlapTable
  • BE: propagate flag through scan operator → tablet reader → rowset reader; extend _should_push_down_value_predicates() for all rowsets; skip __DORIS_DELETE_SIGN__ to preserve delete correctness; keep VExpr in conjuncts as post-merge safety net

Motivation

MOR tables with inverted indexes on value columns cannot utilize those indexes for filtering because value predicates are not pushed to the storage layer. This feature enables per-segment value predicate pushdown for dedup-only/insert-only MOR workloads where the same key always carries identical values across rowsets, allowing inverted indexes and zone maps to filter data early.

Design

Two-layer predicate approach:

  1. ColumnPredicate (storage layer): pushed per-segment for early filtering via inverted index, zone map, bloom filter
  2. VExpr (compute layer): retained in _conjuncts as post-merge safety net

Delete sign handling: __DORIS_DELETE_SIGN__ predicate is excluded from per-segment pushdown to prevent delete markers from being filtered before merge, which would cause deleted rows to reappear.

Test plan

  • Test 1: Basic session variable matching (table name, db.table, wildcard, not-in-list)
  • Test 2: Dedup-only pattern with multiple overlapping rowsets
  • Test 3: Dedup + row-level delete via INSERT INTO (..., __DORIS_DELETE_SIGN__) VALUES (..., 1)
  • Test 4: Dedup + delete predicate via DELETE FROM ... WHERE
  • Test 5: Multiple tables in session variable list
  • Test 6: MOW table (unaffected by setting)
  • Test 7: DUP_KEYS table (unaffected by setting)

Copilot AI review requested due to automatic review settings February 4, 2026 17:33
@Thearas
Copy link
Contributor

Thearas commented Feb 4, 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?

@dataroaring dataroaring force-pushed the mor_value_predicate_pushdown_control branch 2 times, most recently from fffa13a to 94bc596 Compare February 4, 2026 17:43
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 a session variable to control value column predicate pushdown for MOR (Merge-On-Read) tables, allowing users to selectively enable this optimization per table or globally.

Changes:

  • Added session variable enable_mor_value_predicate_pushdown_tables for selective table-level control
  • Added isMorTable() helper method to identify MOR tables (UNIQUE_KEYS without merge-on-write)
  • Modified predicate pushdown logic to support value predicates on MOR tables when enabled

Reviewed changes

Copilot reviewed 10 out of 10 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
gensrc/thrift/PlanNodes.thrift Added optional boolean field enable_mor_value_predicate_pushdown to TOlapScanNode struct
fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java Added session variable declaration, getter, and helper method to check if MOR value predicate pushdown is enabled
fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java Added isMorTable() helper method to identify MOR tables
fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java Set thrift flag in toThrift() based on table type and session variable
be/src/pipeline/exec/scan_operator.h Added virtual method _should_push_down_mor_value_predicate() with default false implementation
be/src/pipeline/exec/scan_operator.cpp Modified predicate pushdown condition to include MOR value predicate check
be/src/pipeline/exec/olap_scan_operator.h Declared override for _should_push_down_mor_value_predicate()
be/src/pipeline/exec/olap_scan_operator.cpp Implemented _should_push_down_mor_value_predicate() to read thrift flag

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

String tblName = olapTable.getName();
boolean enabled = ConnectContext.get().getSessionVariable()
.isMorValuePredicatePushdownEnabled(dbName, tblName);
msg.olap_scan_node.setEnable_mor_value_predicate_pushdown(enabled);
Copy link

Copilot AI Feb 4, 2026

Choose a reason for hiding this comment

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

The setter method name appears to be incorrect. Thrift generates Java setter methods with CamelCase naming from snake_case field names. The method should be setEnableMorValuePredicatePushdown (without underscores) instead of setEnable_mor_value_predicate_pushdown. This follows the same pattern as line 1182 where enable_unique_key_merge_on_write becomes setEnableUniqueKeyMergeOnWrite.

Suggested change
msg.olap_scan_node.setEnable_mor_value_predicate_pushdown(enabled);
msg.olap_scan_node.setEnableMorValuePredicatePushdown(enabled);

Copilot uses AI. Check for mistakes.

// Set MOR value predicate pushdown flag based on session variable
if (olapTable.isMorTable() && ConnectContext.get() != null) {
String dbName = olapTable.getQualifiedDbName();
Copy link

Copilot AI Feb 4, 2026

Choose a reason for hiding this comment

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

Potential null pointer exception. The method getQualifiedDbName() can return null (as seen in Table.java line 367-369). This null value would then be passed to isMorValuePredicatePushdownEnabled() which concatenates it with the table name on line 4691, potentially resulting in "null.tableName". Consider adding a null check for dbName or using an alternative method like getDBName() which handles the null case.

Suggested change
String dbName = olapTable.getQualifiedDbName();
String dbName = olapTable.getQualifiedDbName();
if (dbName == null) {
dbName = olapTable.getDBName();
}

Copilot uses AI. Check for mistakes.
String trimmed = enableMorValuePredicatePushdownTables.trim();
if ("*".equals(trimmed)) {
return true;
}
Copy link

Copilot AI Feb 4, 2026

Choose a reason for hiding this comment

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

The method doesn't handle null dbName parameter. If dbName is null, line 4691 will create "null.tableName" which could lead to unexpected behavior. Consider adding a null check for dbName at the beginning of the method, or using Objects.requireNonNull() to fail fast, or handle the null case explicitly by using only tableName for comparison when dbName is null.

Suggested change
}
}
// When dbName is null, only compare using tableName to avoid creating "null.tableName".
if (dbName == null) {
for (String table : trimmed.split(",")) {
if (table.trim().equalsIgnoreCase(tableName)) {
return true;
}
}
return false;
}

Copilot uses AI. Check for mistakes.
Comment on lines +4682 to +4699
public boolean isMorValuePredicatePushdownEnabled(String dbName, String tableName) {
if (enableMorValuePredicatePushdownTables == null
|| enableMorValuePredicatePushdownTables.isEmpty()) {
return false;
}
String trimmed = enableMorValuePredicatePushdownTables.trim();
if ("*".equals(trimmed)) {
return true;
}
String fullName = dbName + "." + tableName;
for (String table : trimmed.split(",")) {
if (table.trim().equalsIgnoreCase(fullName)
|| table.trim().equalsIgnoreCase(tableName)) {
return true;
}
}
return false;
}
Copy link

Copilot AI Feb 4, 2026

Choose a reason for hiding this comment

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

The new session variable and its helper method isMorValuePredicatePushdownEnabled() lack test coverage. Consider adding unit tests in SessionVariablesTest to verify:

  1. Empty string handling (default behavior)
  2. Wildcard '*' behavior
  3. Single table name matching (with and without database prefix)
  4. Multiple table names (comma-separated)
  5. Case-insensitive matching
  6. Whitespace handling in table names
  7. Edge cases like null dbName parameter

Copilot uses AI. Check for mistakes.
Comment on lines +4693 to +4694
if (table.trim().equalsIgnoreCase(fullName)
|| table.trim().equalsIgnoreCase(tableName)) {
Copy link

Copilot AI Feb 4, 2026

Choose a reason for hiding this comment

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

The method doesn't handle edge cases well when splitting by comma. If the variable contains only commas or has consecutive commas (e.g., "db.table1,,db.table2"), the split operation will produce empty strings. Calling trim() on empty strings and comparing them could lead to false positives. Consider filtering out empty strings after trimming, or using a more robust parsing approach.

Suggested change
if (table.trim().equalsIgnoreCase(fullName)
|| table.trim().equalsIgnoreCase(tableName)) {
String normalized = table.trim();
if (normalized.isEmpty()) {
continue;
}
if (normalized.equalsIgnoreCase(fullName)
|| normalized.equalsIgnoreCase(tableName)) {

Copilot uses AI. Check for mistakes.
Comment on lines +3028 to +3030
*/
public boolean isMorTable() {
return getKeysType() == KeysType.UNIQUE_KEYS && !getEnableUniqueKeyMergeOnWrite();
Copy link

Copilot AI Feb 4, 2026

Choose a reason for hiding this comment

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

The isMorTable() method definition appears correct, but consider verifying the behavior when tableProperty is null. According to getEnableUniqueKeyMergeOnWrite() (lines 3011-3019), it returns false when tableProperty is null, which means a UNIQUE_KEYS table with null tableProperty would be considered a MOR table. Ensure this is the intended behavior for all edge cases.

Suggested change
*/
public boolean isMorTable() {
return getKeysType() == KeysType.UNIQUE_KEYS && !getEnableUniqueKeyMergeOnWrite();
* Only tables with non-null tableProperty are considered for MOR.
*/
public boolean isMorTable() {
return tableProperty != null
&& getKeysType() == KeysType.UNIQUE_KEYS
&& !getEnableUniqueKeyMergeOnWrite();

Copilot uses AI. Check for mistakes.
@dataroaring dataroaring force-pushed the mor_value_predicate_pushdown_control branch from 94bc596 to 8eadc41 Compare February 4, 2026 17:46
@dataroaring
Copy link
Contributor Author

run buildall

@dataroaring dataroaring force-pushed the mor_value_predicate_pushdown_control branch from 8eadc41 to 4a5d300 Compare February 4, 2026 18:17
@dataroaring
Copy link
Contributor 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.29% (1792/2260)
Line Coverage 64.74% (31826/49158)
Region Coverage 65.42% (15884/24280)
Branch Coverage 55.95% (8436/15078)

@doris-robot
Copy link

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

------ Round 1 ----------------------------------
q1	17641	5168	5056	5056
q2	2008	315	238	238
q3	10189	1317	750	750
q4	10204	825	325	325
q5	7542	2159	1895	1895
q6	195	182	151	151
q7	868	757	597	597
q8	9268	1425	1052	1052
q9	5292	4925	4820	4820
q10	6815	1963	1560	1560
q11	524	289	281	281
q12	368	365	222	222
q13	17791	4077	3239	3239
q14	235	232	215	215
q15	905	837	813	813
q16	676	680	622	622
q17	668	815	430	430
q18	6787	6502	7583	6502
q19	1207	1118	677	677
q20	393	381	251	251
q21	2920	2340	1988	1988
q22	374	325	307	307
Total cold run time: 102870 ms
Total hot run time: 31991 ms

----- Round 2, with runtime_filter_mode=off -----
q1	5678	5528	5456	5456
q2	264	345	277	277
q3	2455	2869	2512	2512
q4	1443	1887	1388	1388
q5	4766	4425	4692	4425
q6	218	188	133	133
q7	2047	1968	1805	1805
q8	2556	2394	2325	2325
q9	7387	7608	7560	7560
q10	2838	3097	2670	2670
q11	557	475	462	462
q12	675	706	548	548
q13	3496	4070	3245	3245
q14	274	288	272	272
q15	839	813	779	779
q16	630	681	633	633
q17	1084	1239	1294	1239
q18	7568	7457	7374	7374
q19	811	816	807	807
q20	1968	2095	1879	1879
q21	4541	4205	4144	4144
q22	586	535	492	492
Total cold run time: 52681 ms
Total hot run time: 50425 ms

@doris-robot
Copy link

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

query1	0.06	0.04	0.04
query2	0.13	0.07	0.07
query3	0.30	0.07	0.08
query4	1.60	0.10	0.10
query5	0.26	0.25	0.25
query6	1.14	0.65	0.64
query7	0.03	0.03	0.03
query8	0.08	0.06	0.07
query9	0.58	0.50	0.50
query10	0.55	0.54	0.55
query11	0.26	0.14	0.13
query12	0.26	0.13	0.14
query13	0.63	0.61	0.60
query14	0.99	0.99	0.98
query15	0.92	0.83	0.83
query16	0.39	0.38	0.40
query17	1.00	1.00	1.01
query18	0.24	0.23	0.23
query19	1.81	1.87	1.83
query20	0.02	0.02	0.02
query21	15.41	0.33	0.29
query22	4.97	0.13	0.12
query23	15.38	0.44	0.27
query24	2.25	0.57	0.41
query25	0.11	0.11	0.10
query26	0.20	0.18	0.18
query27	0.11	0.10	0.11
query28	3.62	1.15	0.98
query29	12.51	4.04	3.29
query30	0.33	0.13	0.13
query31	2.80	0.68	0.45
query32	3.23	0.64	0.49
query33	3.09	3.05	3.04
query34	16.11	5.06	4.42
query35	4.44	4.47	4.42
query36	0.62	0.51	0.50
query37	0.31	0.09	0.09
query38	0.27	0.06	0.06
query39	0.08	0.05	0.05
query40	0.21	0.16	0.17
query41	0.13	0.08	0.07
query42	0.09	0.05	0.06
query43	0.09	0.07	0.06
Total cold run time: 97.61 s
Total hot run time: 28.16 s

@hello-stephen
Copy link
Contributor

FE UT Coverage Report

Increment line coverage 4.76% (1/21) 🎉
Increment coverage report
Complete coverage report

@hello-stephen
Copy link
Contributor

BE UT Coverage Report

Increment line coverage 25.00% (2/8) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 52.55% (19369/36856)
Line Coverage 36.04% (179897/499203)
Region Coverage 32.39% (139423/430406)
Branch Coverage 33.40% (60395/180802)

@hello-stephen
Copy link
Contributor

BE Regression && UT Coverage Report

Increment line coverage 87.50% (7/8) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 71.60% (25862/36120)
Line Coverage 54.26% (270210/498008)
Region Coverage 51.85% (225458/434822)
Branch Coverage 53.25% (96668/181532)

@hello-stephen
Copy link
Contributor

FE Regression Coverage Report

Increment line coverage 71.43% (15/21) 🎉
Increment coverage report
Complete coverage report

…own for MOR tables

Add a new session variable `enable_mor_value_predicate_pushdown_tables` to allow
users to selectively enable value column predicate pushdown for MOR (Merge-On-Read)
tables. This can improve query performance by utilizing inverted indexes on value
columns for filtering.

The session variable accepts:
- Comma-separated table names: `db1.tbl1,db2.tbl2`
- Wildcard for all MOR tables: `*`
- Empty string to disable (default)

Changes:
- Add session variable in SessionVariable.java with helper method
- Add isMorTable() helper in OlapTable.java
- Add Thrift field enable_mor_value_predicate_pushdown in TOlapScanNode
- Set flag in OlapScanNode.toThrift() based on session variable
- Add virtual method _should_push_down_mor_value_predicate() in scan_operator
- Implement override in olap_scan_operator to read the flag
- Modify predicate pushdown condition in scan_operator.cpp
@dataroaring dataroaring force-pushed the mor_value_predicate_pushdown_control branch from 4a5d300 to a06783e Compare February 5, 2026 00:04
@dataroaring dataroaring changed the title [feature](scan) Add session variable to control value predicate pushdown for MOR tables [feature](scan) Add value predicate pushdown control for MOR tables Feb 5, 2026
@dataroaring dataroaring force-pushed the mor_value_predicate_pushdown_control branch 2 times, most recently from 9bb1fa0 to a0385a9 Compare February 5, 2026 01:23
…bles

Enable value column predicates to be pushed down to storage layer for
MOR (Merge-On-Read) tables when controlled by the session variable
enable_mor_value_predicate_pushdown_tables. This allows inverted indexes
on value columns to be utilized for filtering, improving query performance
on dedup-only/insert-only MOR workloads.

Key changes:
- Propagate enable_mor_value_predicate_pushdown flag from thrift scan node
  through OlapScanner -> ReaderParams -> RowsetReaderContext -> BetaRowsetReader
- Extend _should_push_down_value_predicates() to push value predicates for
  all rowsets when the flag is set
- Skip __DORIS_DELETE_SIGN__ predicate during per-segment pushdown to prevent
  delete markers from being filtered before merge
- Revert scan_operator.cpp to only remove VExpr from conjuncts for key columns,
  preserving VExpr as post-merge safety net for value columns
- Add regression tests covering dedup, delete-sign, and delete-predicate scenarios
@dataroaring dataroaring force-pushed the mor_value_predicate_pushdown_control branch from a0385a9 to 7d4aa18 Compare February 5, 2026 01:30
@dataroaring
Copy link
Contributor 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.29% (1792/2260)
Line Coverage 64.74% (31827/49158)
Region Coverage 65.43% (15886/24280)
Branch Coverage 55.94% (8434/15078)

@hello-stephen
Copy link
Contributor

FE UT Coverage Report

Increment line coverage 4.76% (1/21) 🎉
Increment coverage report
Complete coverage report

@doris-robot
Copy link

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

------ Round 1 ----------------------------------
q1	17639	4609	4340	4340
q2	2058	366	228	228
q3	10457	1369	738	738
q4	10332	841	311	311
q5	9262	2214	1892	1892
q6	204	179	144	144
q7	877	746	600	600
q8	9270	1566	1061	1061
q9	5426	4911	4782	4782
q10	6854	1978	1586	1586
q11	523	296	281	281
q12	382	380	221	221
q13	17800	4075	3275	3275
q14	232	248	218	218
q15	897	825	800	800
q16	695	688	658	658
q17	778	803	485	485
q18	6840	6538	6615	6538
q19	1386	1003	634	634
q20	382	356	249	249
q21	2642	2151	1848	1848
q22	359	311	280	280
Total cold run time: 105295 ms
Total hot run time: 31169 ms

----- Round 2, with runtime_filter_mode=off -----
q1	4458	4339	4372	4339
q2	260	337	245	245
q3	2142	2620	2287	2287
q4	1321	1753	1325	1325
q5	4347	4176	4225	4176
q6	214	178	133	133
q7	1878	2259	1874	1874
q8	2568	2431	2476	2431
q9	7486	7619	7579	7579
q10	2910	3114	2668	2668
q11	533	470	449	449
q12	697	805	687	687
q13	3894	4481	3587	3587
q14	290	322	300	300
q15	894	848	832	832
q16	715	746	679	679
q17	1201	1327	1421	1327
q18	8384	7965	7783	7783
q19	914	864	832	832
q20	2081	2144	2009	2009
q21	4913	4185	4112	4112
q22	601	539	496	496
Total cold run time: 52701 ms
Total hot run time: 50150 ms

@doris-robot
Copy link

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

query1	0.06	0.05	0.05
query2	0.13	0.07	0.08
query3	0.31	0.07	0.07
query4	1.60	0.10	0.10
query5	0.25	0.26	0.24
query6	1.14	0.65	0.64
query7	0.03	0.02	0.02
query8	0.08	0.06	0.06
query9	0.58	0.50	0.48
query10	0.55	0.56	0.55
query11	0.27	0.13	0.13
query12	0.26	0.14	0.15
query13	0.63	0.61	0.60
query14	0.98	0.98	0.99
query15	0.91	0.82	0.82
query16	0.39	0.39	0.40
query17	1.06	1.06	1.02
query18	0.25	0.22	0.22
query19	1.96	1.82	1.85
query20	0.02	0.01	0.02
query21	15.39	0.33	0.29
query22	4.97	0.11	0.11
query23	15.38	0.44	0.28
query24	2.39	0.56	0.41
query25	0.12	0.10	0.10
query26	0.20	0.18	0.18
query27	0.10	0.11	0.11
query28	3.69	1.16	0.98
query29	12.53	4.03	3.29
query30	0.32	0.13	0.10
query31	2.81	0.69	0.43
query32	3.23	0.63	0.50
query33	3.07	3.05	3.04
query34	16.42	5.06	4.43
query35	4.44	4.40	4.47
query36	0.60	0.49	0.49
query37	0.30	0.09	0.08
query38	0.28	0.05	0.06
query39	0.08	0.05	0.05
query40	0.20	0.16	0.16
query41	0.14	0.06	0.06
query42	0.09	0.06	0.05
query43	0.06	0.07	0.05
Total cold run time: 98.27 s
Total hot run time: 28.05 s

@hello-stephen
Copy link
Contributor

BE UT Coverage Report

Increment line coverage 30.00% (6/20) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 52.55% (19369/36860)
Line Coverage 36.03% (179893/499238)
Region Coverage 32.38% (139366/430442)
Branch Coverage 33.40% (60395/180828)

The delete sign skip logic in _init_conditions_param() was reading
from _reader_context.enable_mor_value_predicate_pushdown, but this
flag is only set later in _capture_rs_readers(). Use read_params
directly since it's already available as a function parameter.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@dataroaring
Copy link
Contributor 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.29% (1792/2260)
Line Coverage 64.76% (31833/49158)
Region Coverage 65.42% (15885/24280)
Branch Coverage 55.96% (8438/15078)

@hello-stephen
Copy link
Contributor

FE UT Coverage Report

Increment line coverage 4.76% (1/21) 🎉
Increment coverage report
Complete coverage report

@doris-robot
Copy link

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

------ Round 1 ----------------------------------
q1	17608	4456	4291	4291
q2	1996	353	236	236
q3	10159	1316	737	737
q4	10195	800	314	314
q5	7514	2220	1905	1905
q6	203	177	148	148
q7	899	750	579	579
q8	9255	1419	1169	1169
q9	5185	4871	4898	4871
q10	6786	1946	1561	1561
q11	518	311	278	278
q12	332	372	224	224
q13	17782	4048	3259	3259
q14	226	242	215	215
q15	893	822	808	808
q16	697	683	632	632
q17	655	781	537	537
q18	7217	6552	7407	6552
q19	1124	1073	693	693
q20	422	407	266	266
q21	3013	2262	2226	2226
q22	401	327	280	280
Total cold run time: 103080 ms
Total hot run time: 31781 ms

----- Round 2, with runtime_filter_mode=off -----
q1	4543	4756	4650	4650
q2	265	363	260	260
q3	2396	2923	2485	2485
q4	1480	1887	1422	1422
q5	4732	4492	4633	4492
q6	224	177	139	139
q7	1994	1871	1773	1773
q8	2555	2498	2461	2461
q9	7660	7480	7437	7437
q10	2787	3074	2678	2678
q11	544	475	457	457
q12	729	759	602	602
q13	3936	4336	3567	3567
q14	285	286	260	260
q15	829	787	776	776
q16	635	676	664	664
q17	1096	1242	1270	1242
q18	7614	7334	7485	7334
q19	880	851	841	841
q20	2003	2017	1863	1863
q21	5063	4318	4123	4123
q22	556	539	489	489
Total cold run time: 52806 ms
Total hot run time: 50015 ms

@doris-robot
Copy link

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

query1	0.05	0.05	0.04
query2	0.09	0.04	0.04
query3	0.26	0.08	0.08
query4	1.60	0.11	0.11
query5	0.26	0.25	0.24
query6	1.17	0.67	0.66
query7	0.03	0.02	0.03
query8	0.06	0.04	0.04
query9	0.56	0.51	0.48
query10	0.55	0.54	0.56
query11	0.15	0.09	0.09
query12	0.14	0.11	0.10
query13	0.64	0.62	0.61
query14	1.07	1.07	1.07
query15	0.87	0.86	0.88
query16	0.40	0.42	0.38
query17	1.18	1.12	1.11
query18	0.23	0.22	0.21
query19	2.02	2.00	2.05
query20	0.02	0.02	0.01
query21	15.41	0.29	0.16
query22	5.38	0.06	0.05
query23	16.26	0.29	0.11
query24	1.12	0.62	0.32
query25	0.09	0.09	0.06
query26	0.15	0.14	0.14
query27	0.06	0.06	0.07
query28	3.04	1.18	0.96
query29	12.58	3.97	3.16
query30	0.28	0.13	0.11
query31	2.81	0.62	0.40
query32	3.23	0.60	0.50
query33	3.24	3.27	3.25
query34	16.41	5.38	4.74
query35	4.84	5.26	5.40
query36	0.69	0.55	0.54
query37	0.11	0.07	0.07
query38	0.06	0.04	0.03
query39	0.05	0.03	0.02
query40	0.20	0.18	0.16
query41	0.08	0.03	0.03
query42	0.04	0.03	0.03
query43	0.04	0.03	0.04
Total cold run time: 97.52 s
Total hot run time: 28.88 s

@doris-robot
Copy link

BE UT Coverage Report

Increment line coverage 30.00% (6/20) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 52.55% (19371/36863)
Line Coverage 36.04% (179933/499287)
Region Coverage 32.39% (139443/430471)
Branch Coverage 33.40% (60400/180850)

@hello-stephen
Copy link
Contributor

BE Regression && UT Coverage Report

Increment line coverage 70.00% (14/20) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 71.62% (25872/36126)
Line Coverage 54.23% (270108/498099)
Region Coverage 51.57% (224293/434889)
Branch Coverage 53.07% (96360/181582)

@hello-stephen
Copy link
Contributor

FE Regression Coverage Report

Increment line coverage 85.71% (18/21) 🎉
Increment coverage report
Complete coverage report

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants