This is an automated email from the ASF dual-hosted git repository.

yiguolei pushed a commit to branch branch-4.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-4.0 by this push:
     new 5d30bfdb684 branch-4.0: [fix](mv) Fix sync mv could not be chosen by 
cbo stable because stats upload from be not in time #58720 (#58772)
5d30bfdb684 is described below

commit 5d30bfdb684e498d661057e2f05b4acf90f209a7
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Thu Dec 11 19:16:23 2025 +0800

    branch-4.0: [fix](mv) Fix sync mv could not be chosen by cbo stable because 
stats upload from be not in time #58720 (#58772)
    
    Cherry-picked from #58720
    
    Co-authored-by: seawinde <[email protected]>
---
 .../org/apache/doris/nereids/stats/StatsCalculator.java   |  6 ++++++
 .../main/java/org/apache/doris/qe/SessionVariable.java    | 15 ---------------
 .../mv_p0/ssb/multiple_no_where/multiple_no_where.groovy  |  2 ++
 .../suites/mv_p0/ssb/multiple_ssb/multiple_ssb.groovy     |  4 ++++
 .../ssb/multiple_ssb_between/multiple_ssb_between.groovy  |  6 +++++-
 regression-test/suites/mv_p0/ssb/q_1_1/q_1_1.groovy       |  1 +
 regression-test/suites/mv_p0/ssb/q_2_1/q_2_1.groovy       |  1 +
 regression-test/suites/mv_p0/ssb/q_3_1/q_3_1.groovy       |  1 +
 regression-test/suites/mv_p0/ssb/q_4_1/q_4_1.groovy       |  1 +
 regression-test/suites/mv_p0/ssb/q_4_1_r1/q_4_1_r1.groovy |  1 +
 10 files changed, 22 insertions(+), 16 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/StatsCalculator.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/StatsCalculator.java
index f0ca1f1e6ba..c73ee7fc0e3 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/StatsCalculator.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/StatsCalculator.java
@@ -543,6 +543,12 @@ public class StatsCalculator extends 
DefaultPlanVisitor<Statistics, Void> {
                     optStats.isPresent(), tableRowCount, 
olapTable.getQualifiedName());
             if (optStats.isPresent()) {
                 double selectedPartitionsRowCount = 
getSelectedPartitionRowCount(olapScan, tableRowCount);
+                if (isRegisteredRowCount(olapScan)) {
+                    // If a row count is injected for the materialized view, 
use it to fix the issue where
+                    // the materialized view cannot be selected by cbo stable 
due to selectedPartitionsRowCount being 0,
+                    // which is caused by delayed statistics reporting.
+                    selectedPartitionsRowCount = tableRowCount;
+                }
                 LOG.info("computeOlapScan optStats is {}, 
selectedPartitionsRowCount is {}", optStats.get(),
                         selectedPartitionsRowCount);
                 // if estimated mv rowCount is more than actual row count, 
fall back to base table stats
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java 
b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
index ab221d693af..9a7d86b53ec 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
@@ -32,7 +32,6 @@ import org.apache.doris.nereids.metrics.Event;
 import org.apache.doris.nereids.metrics.EventSwitchParser;
 import org.apache.doris.nereids.parser.Dialect;
 import org.apache.doris.nereids.rules.RuleType;
-import 
org.apache.doris.nereids.rules.exploration.mv.PreMaterializedViewRewriter.PreRewriteStrategy;
 import org.apache.doris.nereids.rules.expression.ExpressionRuleType;
 import org.apache.doris.planner.GroupCommitBlockSink;
 import org.apache.doris.qe.VariableMgr.VarAttr;
@@ -3216,20 +3215,6 @@ public class SessionVariable implements Serializable, 
Writable {
             this.enableReserveMemory = randomInt % 5 != 0;
         }
 
-        // random pre materialized view rewrite strategy
-        randomInt = random.nextInt(3);
-        switch (randomInt % 3) {
-            case 0:
-                this.preMaterializedViewRewriteStrategy = 
PreRewriteStrategy.NOT_IN_RBO.name();
-                break;
-            case 1:
-                this.preMaterializedViewRewriteStrategy = 
PreRewriteStrategy.TRY_IN_RBO.name();
-                break;
-            case 2:
-            default:
-                this.preMaterializedViewRewriteStrategy = 
PreRewriteStrategy.FORCE_IN_RBO.name();
-                break;
-        }
         setFuzzyForCatalog(random);
     }
 
diff --git 
a/regression-test/suites/mv_p0/ssb/multiple_no_where/multiple_no_where.groovy 
b/regression-test/suites/mv_p0/ssb/multiple_no_where/multiple_no_where.groovy
index a7b3145dddc..0213a993be0 100644
--- 
a/regression-test/suites/mv_p0/ssb/multiple_no_where/multiple_no_where.groovy
+++ 
b/regression-test/suites/mv_p0/ssb/multiple_no_where/multiple_no_where.groovy
@@ -107,6 +107,8 @@ suite ("multiple_no_where") {
     qt_select_star "select * from lineorder_flat order by 1,2, P_MFGR;"
 
     sql """analyze table lineorder_flat with sync;"""
+    sql """alter table lineorder_flat modify column C_CITY set stats 
('row_count'='7');"""
+    sql """alter table lineorder_flat modify column a3 set stats 
('row_count'='1');"""
     sql """set enable_stats=false;"""
 
     mv_rewrite_success("""SELECT SUM(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenue
diff --git a/regression-test/suites/mv_p0/ssb/multiple_ssb/multiple_ssb.groovy 
b/regression-test/suites/mv_p0/ssb/multiple_ssb/multiple_ssb.groovy
index 22e53a58a2d..97f31ed3b58 100644
--- a/regression-test/suites/mv_p0/ssb/multiple_ssb/multiple_ssb.groovy
+++ b/regression-test/suites/mv_p0/ssb/multiple_ssb/multiple_ssb.groovy
@@ -154,6 +154,10 @@ suite ("multiple_ssb") {
 
     sql """analyze table lineorder_flat with sync;"""
     sql """alter table lineorder_flat modify column LO_ORDERDATE set stats 
('row_count'='8');"""
+    sql """alter table lineorder_flat modify column a1 set stats 
('row_count'='1');"""
+    sql """alter table lineorder_flat modify column a4 set stats 
('row_count'='1');"""
+    sql """alter table lineorder_flat modify column a6 set stats 
('row_count'='1');"""
+    sql """alter table lineorder_flat modify column x2 set stats 
('row_count'='1');"""
     sql """set enable_stats=false;"""
 
     mv_rewrite_success("""SELECT SUM(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenue
diff --git 
a/regression-test/suites/mv_p0/ssb/multiple_ssb_between/multiple_ssb_between.groovy
 
b/regression-test/suites/mv_p0/ssb/multiple_ssb_between/multiple_ssb_between.groovy
index 2eec2f8907a..6127b97dbf8 100644
--- 
a/regression-test/suites/mv_p0/ssb/multiple_ssb_between/multiple_ssb_between.groovy
+++ 
b/regression-test/suites/mv_p0/ssb/multiple_ssb_between/multiple_ssb_between.groovy
@@ -153,7 +153,11 @@ suite ("multiple_ssb_between") {
     sql """set enable_stats=true;"""
 
     sql """alter table lineorder_flat modify column LO_ORDERDATE set stats 
('row_count'='8');"""
-    
+    sql """alter table lineorder_flat modify column a1 set stats 
('row_count'='1');"""
+    sql """alter table lineorder_flat modify column a4 set stats 
('row_count'='1');"""
+    sql """alter table lineorder_flat modify column a6 set stats 
('row_count'='1');"""
+    sql """alter table lineorder_flat modify column x2 set stats 
('row_count'='1');"""
+
     mv_rewrite_success("""SELECT SUM(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenue
                 FROM lineorder_flat
                 WHERE
diff --git a/regression-test/suites/mv_p0/ssb/q_1_1/q_1_1.groovy 
b/regression-test/suites/mv_p0/ssb/q_1_1/q_1_1.groovy
index d5abacca118..2ba3eb6d9b4 100644
--- a/regression-test/suites/mv_p0/ssb/q_1_1/q_1_1.groovy
+++ b/regression-test/suites/mv_p0/ssb/q_1_1/q_1_1.groovy
@@ -102,6 +102,7 @@ suite ("mv_ssb_q_1_1") {
 
     sql "analyze table lineorder_flat with sync;"
     sql """alter table lineorder_flat modify column C_CITY set stats 
('row_count'='6');"""
+    sql """alter table lineorder_flat modify column a1 set stats 
('row_count'='1');"""
     mv_rewrite_success("""SELECT SUM(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenue
                 FROM lineorder_flat
                 WHERE
diff --git a/regression-test/suites/mv_p0/ssb/q_2_1/q_2_1.groovy 
b/regression-test/suites/mv_p0/ssb/q_2_1/q_2_1.groovy
index c40d2842228..e40c84f9b1f 100644
--- a/regression-test/suites/mv_p0/ssb/q_2_1/q_2_1.groovy
+++ b/regression-test/suites/mv_p0/ssb/q_2_1/q_2_1.groovy
@@ -94,6 +94,7 @@ suite ("mv_ssb_q_2_1") {
     qt_select_star "select * from lineorder_flat order by 1,2,P_MFGR;"
 
   sql """alter table lineorder_flat modify column LO_ORDERDATE set stats 
('row_count'='2');"""
+  sql """alter table lineorder_flat modify column a2 set stats 
('row_count'='1');"""
 
     mv_rewrite_success("""SELECT
                 SUM(LO_REVENUE), (LO_ORDERDATE DIV 10000) AS YEAR,
diff --git a/regression-test/suites/mv_p0/ssb/q_3_1/q_3_1.groovy 
b/regression-test/suites/mv_p0/ssb/q_3_1/q_3_1.groovy
index 564a5a1dbc7..0497c3609fd 100644
--- a/regression-test/suites/mv_p0/ssb/q_3_1/q_3_1.groovy
+++ b/regression-test/suites/mv_p0/ssb/q_3_1/q_3_1.groovy
@@ -99,6 +99,7 @@ suite ("mv_ssb_q_3_1") {
     sql """analyze table lineorder_flat with sync;"""
 
     sql """alter table lineorder_flat modify column LO_ORDERDATE set stats 
('row_count'='2');"""
+    sql """alter table lineorder_flat modify column a1 set stats 
('row_count'='1');"""
 
     mv_rewrite_success("""SELECT
                 C_NATION,
diff --git a/regression-test/suites/mv_p0/ssb/q_4_1/q_4_1.groovy 
b/regression-test/suites/mv_p0/ssb/q_4_1/q_4_1.groovy
index b5fa2332a9f..0f0bbc50a71 100644
--- a/regression-test/suites/mv_p0/ssb/q_4_1/q_4_1.groovy
+++ b/regression-test/suites/mv_p0/ssb/q_4_1/q_4_1.groovy
@@ -93,6 +93,7 @@ suite ("mv_ssb_q_4_1") {
     sql """analyze table lineorder_flat with sync;"""
 
     sql """alter table lineorder_flat modify column LO_ORDERDATE set stats 
('row_count'='2');"""
+    sql """alter table lineorder_flat modify column a2 set stats 
('row_count'='1');"""
 
     mv_rewrite_success("""SELECT (LO_ORDERDATE DIV 10000) AS YEAR,
                 C_NATION,
diff --git a/regression-test/suites/mv_p0/ssb/q_4_1_r1/q_4_1_r1.groovy 
b/regression-test/suites/mv_p0/ssb/q_4_1_r1/q_4_1_r1.groovy
index e36cd614520..1b9ed83d4ff 100644
--- a/regression-test/suites/mv_p0/ssb/q_4_1_r1/q_4_1_r1.groovy
+++ b/regression-test/suites/mv_p0/ssb/q_4_1_r1/q_4_1_r1.groovy
@@ -96,6 +96,7 @@ suite ("q_4_1_r1") {
 
     sql """analyze table lineorder_flat with sync;"""
     sql """alter table lineorder_flat modify column LO_ORDERDATE set stats 
('row_count'='8');"""
+    sql """alter table lineorder_flat modify column a1 set stats 
('row_count'='1');"""
     sql """set enable_stats=false;"""
 
     mv_rewrite_success("""SELECT (LO_ORDERDATE DIV 10000) AS YEAR,


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to