[fix](nereids) do not push '<=>' rf through nlj outer join (#32952)

f
This commit is contained in:
minghong
2024-03-28 13:29:29 +08:00
committed by yiguolei
parent 9fa6c3f2a7
commit 2edf9ef301
2 changed files with 26 additions and 6 deletions

View File

@ -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();

View File

@ -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<RuntimeFilterId> 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);
}
}