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

jakevin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 2a13d15d20 [feature](Nereids): disable join order when the join number 
> 63 (#22708)
2a13d15d20 is described below

commit 2a13d15d20bd6b21266f2cad40fe0da14859b87a
Author: 谢健 <[email protected]>
AuthorDate: Wed Aug 9 17:09:38 2023 +0800

    [feature](Nereids): disable join order when the join number > 63 (#22708)
---
 .../apache/doris/nereids/jobs/executor/Optimizer.java |  4 +++-
 .../java/org/apache/doris/qe/SessionVariable.java     | 14 ++++++++++++++
 .../doris/nereids/sqltest/JoinOrderJobTest.java       | 19 +++++++++++++++++++
 3 files changed, 36 insertions(+), 1 deletion(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Optimizer.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Optimizer.java
index a1c46cc3b1..b2bd5e63ec 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Optimizer.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Optimizer.java
@@ -56,7 +56,9 @@ public class Optimizer {
                 || maxJoinCount > 
getSessionVariable().getMaxTableCountUseCascadesJoinReorder();
         cascadesContext.getStatementContext().setDpHyp(isDpHyp);
         cascadesContext.getStatementContext().setOtherJoinReorder(false);
-        if (!getSessionVariable().isDisableJoinReorder() && isDpHyp) {
+        if (!getSessionVariable().isDisableJoinReorder() && isDpHyp
+                && maxJoinCount <= 
getSessionVariable().getMaxJoinNumberOfReorder()) {
+            //RightNow, dphyper can only order 64 join operators
             dpHypOptimize();
         }
 
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 f4b40c036b..2d0b7737b3 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
@@ -175,6 +175,8 @@ public class SessionVariable implements Serializable, 
Writable {
     // turn off all automatic join reorder algorithms
     public static final String DISABLE_JOIN_REORDER = "disable_join_reorder";
 
+    public static final String MAX_JOIN_NUMBER_OF_REORDER = 
"max_join_number_of_reorder";
+
     public static final String ENABLE_NEREIDS_DML = "enable_nereids_dml";
     public static final String ENABLE_STRICT_CONSISTENCY_DML = 
"enable_strict_consistency_dml";
 
@@ -745,6 +747,9 @@ public class SessionVariable implements Serializable, 
Writable {
     @VariableMgr.VarAttr(name = DISABLE_JOIN_REORDER)
     private boolean disableJoinReorder = false;
 
+    @VariableMgr.VarAttr(name = MAX_JOIN_NUMBER_OF_REORDER)
+    private int maxJoinNumberOfReorder = 63;
+
     @VariableMgr.VarAttr(name = ENABLE_BUSHY_TREE, needForward = true)
     private boolean enableBushyTree = false;
 
@@ -756,6 +761,15 @@ public class SessionVariable implements Serializable, 
Writable {
         this.maxJoinNumBushyTree = maxJoinNumBushyTree;
     }
 
+    public int getMaxJoinNumberOfReorder() {
+        return maxJoinNumberOfReorder;
+    }
+
+    public void setMaxJoinNumberOfReorder(int maxJoinNumberOfReorder) {
+        this.maxJoinNumberOfReorder = maxJoinNumberOfReorder;
+    }
+
+
     @VariableMgr.VarAttr(name = MAX_JOIN_NUMBER_BUSHY_TREE)
     private int maxJoinNumBushyTree = 5;
 
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/sqltest/JoinOrderJobTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/sqltest/JoinOrderJobTest.java
index 66f747aae8..259fb24ece 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/sqltest/JoinOrderJobTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/sqltest/JoinOrderJobTest.java
@@ -17,7 +17,12 @@
 
 package org.apache.doris.nereids.sqltest;
 
+import org.apache.doris.nereids.CascadesContext;
 import org.apache.doris.nereids.memo.Memo;
+import org.apache.doris.nereids.trees.plans.Plan;
+import org.apache.doris.nereids.trees.plans.logical.LogicalProject;
+import org.apache.doris.nereids.util.HyperGraphBuilder;
+import org.apache.doris.nereids.util.MemoTestUtils;
 import org.apache.doris.nereids.util.PlanChecker;
 
 import org.junit.jupiter.api.Assertions;
@@ -122,4 +127,18 @@ public class JoinOrderJobTest extends SqlTestBase {
                 .getMemo();
         Assertions.assertEquals(memo.countMaxContinuousJoin(), 2);
     }
+
+    @Test
+    protected void test64TableJoin() {
+        HyperGraphBuilder hyperGraphBuilder = new HyperGraphBuilder();
+        Plan plan = hyperGraphBuilder
+                .randomBuildPlanWith(65, 65);
+        plan = new LogicalProject(plan.getOutput(), plan);
+        CascadesContext cascadesContext = 
MemoTestUtils.createCascadesContext(connectContext, plan);
+        
Assertions.assertEquals(cascadesContext.getMemo().countMaxContinuousJoin(), 64);
+        hyperGraphBuilder.initStats(cascadesContext);
+        PlanChecker.from(cascadesContext)
+                .optimize()
+                .getBestPlanTree();
+    }
 }


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

Reply via email to