xzj7019 commented on code in PR #29847:
URL: https://github.com/apache/doris/pull/29847#discussion_r1448713223
##########
fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalDistribute.java:
##########
@@ -134,22 +134,26 @@ public boolean pushDownRuntimeFilter(CascadesContext
context, IdGenerator<Runtim
// currently, we can ensure children in the two side are corresponding
to the equal_to's.
// so right maybe an expression and left is a slot
Slot probeSlot = RuntimeFilterGenerator.checkTargetChild(probeExpr);
-
- // aliasTransMap doesn't contain the key, means that the path from the
scan to the join
- // contains join with denied join type. for example: a left join b on
a.id = b.id
- if
(!RuntimeFilterGenerator.checkPushDownPreconditionsForJoin(builderNode, ctx,
probeSlot)) {
+ if (probeSlot == null) {
return false;
}
- PhysicalRelation scan = ctx.getAliasTransferPair(probeSlot).first;
- if
(!RuntimeFilterGenerator.checkPushDownPreconditionsForRelation(this, scan)) {
- return false;
+ if
(RuntimeFilterGenerator.checkPushDownPreconditionsForProjectOrDistribute(ctx,
probeSlot)) {
+ PhysicalRelation scan = ctx.getAliasTransferPair(probeSlot).first;
+ if
(!RuntimeFilterGenerator.checkPushDownPreconditionsForRelation(this, scan)) {
+ return false;
+ }
+ // TODO: global rf need merge stage which is heavy
+ // add some rule, such as bc only is allowed for
+ // pushing down through distribute, currently always pushing.
+ AbstractPhysicalPlan childPlan = (AbstractPhysicalPlan) child(0);
+ return childPlan.pushDownRuntimeFilter(context, generator,
builderNode, src, probeExpr,
+ type, buildSideNdv, exprOrder);
+ } else {
+ // if probe slot doesn't exist in aliasTransferMap, then try to
pass it to child
Review Comment:
it is hard to maintain aliasMap in complicated cases, such as
project(join(union(xxx))), etc. At that time, push down is possible and during
some special plan node, such as set operation node, the probe expr will be
remapped and the new probe expr can be found at aliasMap at that time.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]