diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalHashJoin.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalHashJoin.java index 487e42661c..a50f6a4e0a 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalHashJoin.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalHashJoin.java @@ -211,12 +211,12 @@ public class PhysicalHashJoin< if (builderJoin == this) { return false; } - EqualPredicate equal = (EqualPredicate) builderNode.getHashJoinConjuncts().get(exprOrder); - if (equal instanceof NullSafeEqual) { - if (this.joinType.isOuterJoin()) { - return false; - } - } + } + } + EqualPredicate equal = (EqualPredicate) builderNode.getHashJoinConjuncts().get(exprOrder); + if (equal instanceof NullSafeEqual) { + if (this.joinType.isOuterJoin()) { + return false; } } RuntimeFilterContext ctx = context.getRuntimeFilterContext(); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalNestedLoopJoin.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalNestedLoopJoin.java index b8e5c17e03..c3c4819ca9 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalNestedLoopJoin.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalNestedLoopJoin.java @@ -17,12 +17,16 @@ package org.apache.doris.nereids.trees.plans.physical; +import org.apache.doris.common.IdGenerator; +import org.apache.doris.nereids.CascadesContext; import org.apache.doris.nereids.hint.DistributeHint; import org.apache.doris.nereids.memo.GroupExpression; import org.apache.doris.nereids.properties.LogicalProperties; import org.apache.doris.nereids.properties.PhysicalProperties; +import org.apache.doris.nereids.trees.expressions.EqualPredicate; import org.apache.doris.nereids.trees.expressions.Expression; import org.apache.doris.nereids.trees.expressions.MarkJoinSlotReference; +import org.apache.doris.nereids.trees.expressions.NullSafeEqual; import org.apache.doris.nereids.trees.expressions.Slot; import org.apache.doris.nereids.trees.plans.DistributeType; import org.apache.doris.nereids.trees.plans.JoinType; @@ -31,7 +35,9 @@ import org.apache.doris.nereids.trees.plans.PlanType; import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor; import org.apache.doris.nereids.util.ExpressionUtils; import org.apache.doris.nereids.util.MutableState; +import org.apache.doris.planner.RuntimeFilterId; import org.apache.doris.statistics.Statistics; +import org.apache.doris.thrift.TRuntimeFilterType; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; @@ -238,4 +244,18 @@ public class PhysicalNestedLoopJoin< hashJoinConjuncts, otherJoinConjuncts, markJoinConjuncts, markJoinSlotReference, groupExpression, null, physicalProperties, statistics, left(), right()); } + + @Override + public boolean pushDownRuntimeFilter(CascadesContext context, IdGenerator generator, + AbstractPhysicalJoin builderNode, Expression srcExpr, + Expression probeExpr, TRuntimeFilterType type, long buildSideNdv, + int exprOrder) { + EqualPredicate equal = (EqualPredicate) builderNode.getHashJoinConjuncts().get(exprOrder); + if (equal instanceof NullSafeEqual && this.joinType.isOuterJoin()) { + return false; + } + + return super.pushDownRuntimeFilter(context, generator, builderNode, srcExpr, probeExpr, type, buildSideNdv, + exprOrder); + } }