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

morrysnow 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 6f6264693ff [fix](Nereids) can't choosing best plan for join that 
could only broadcast (#25511)
6f6264693ff is described below

commit 6f6264693ffc84d020ef60ea606e963edcf39b5d
Author: 谢健 <jianx...@gmail.com>
AuthorDate: Wed Oct 18 10:40:05 2023 +0800

    [fix](Nereids) can't choosing best plan for join that could only broadcast 
(#25511)
    
    we need ensure there is one request properties at least
---
 .../doris/nereids/properties/RequestPropertyDeriver.java    |  8 ++------
 .../main/java/org/apache/doris/nereids/util/JoinUtils.java  | 13 +++++++++++++
 2 files changed, 15 insertions(+), 6 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/RequestPropertyDeriver.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/RequestPropertyDeriver.java
index acc8ef78867..7d9f8f994e3 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/RequestPropertyDeriver.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/RequestPropertyDeriver.java
@@ -167,12 +167,8 @@ public class RequestPropertyDeriver extends 
PlanVisitor<Void, PlanContext> {
         }
 
         // for broadcast join
-        double memLimit = 
ConnectContext.get().getSessionVariable().getMaxExecMemByte();
-        double rowsLimit = 
ConnectContext.get().getSessionVariable().getBroadcastRowCountLimit();
-        double brMemlimit = 
ConnectContext.get().getSessionVariable().getBroadcastHashtableMemLimitPercentage();
-        double datasize = 
hashJoin.getGroupExpression().get().child(1).getStatistics().computeSize();
-        double rowCount = 
hashJoin.getGroupExpression().get().child(1).getStatistics().getRowCount();
-        if (JoinUtils.couldBroadcast(hashJoin) && rowCount <= rowsLimit && 
datasize <= memLimit * brMemlimit) {
+        if (JoinUtils.couldBroadcast(hashJoin)
+                && (JoinUtils.checkBroadcastJoinStats(hashJoin) || 
requestPropertyToChildren.isEmpty())) {
             addBroadcastJoinRequestProperty();
         }
         return null;
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/util/JoinUtils.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/util/JoinUtils.java
index b9e61e256bf..d1fb973dd61 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/util/JoinUtils.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/util/JoinUtils.java
@@ -35,6 +35,7 @@ import org.apache.doris.nereids.trees.plans.Plan;
 import org.apache.doris.nereids.trees.plans.algebra.Join;
 import org.apache.doris.nereids.trees.plans.physical.AbstractPhysicalJoin;
 import org.apache.doris.nereids.trees.plans.physical.PhysicalDistribute;
+import org.apache.doris.nereids.trees.plans.physical.PhysicalHashJoin;
 import org.apache.doris.nereids.trees.plans.physical.PhysicalPlan;
 import org.apache.doris.qe.ConnectContext;
 
@@ -61,6 +62,18 @@ public class JoinUtils {
         return !(join.getJoinType().isRightJoin() || 
join.getJoinType().isFullOuterJoin());
     }
 
+    /**
+     * check if the row count of the left child in the broadcast join is less 
than a threshold value.
+     */
+    public static boolean checkBroadcastJoinStats(PhysicalHashJoin<? extends 
Plan, ? extends Plan> join) {
+        double memLimit = 
ConnectContext.get().getSessionVariable().getMaxExecMemByte();
+        double rowsLimit = 
ConnectContext.get().getSessionVariable().getBroadcastRowCountLimit();
+        double brMemlimit = 
ConnectContext.get().getSessionVariable().getBroadcastHashtableMemLimitPercentage();
+        double datasize = 
join.getGroupExpression().get().child(1).getStatistics().computeSize();
+        double rowCount = 
join.getGroupExpression().get().child(1).getStatistics().getRowCount();
+        return rowCount <= rowsLimit && datasize <= memLimit * brMemlimit;
+    }
+
     /**
      * for a given equation, judge if it can be used as hash join condition
      */


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to