Github user maropu commented on a diff in the pull request:
https://github.com/apache/spark/pull/20345#discussion_r180615479
--- Diff:
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/planning/patterns.scala
---
@@ -172,17 +174,20 @@ object ExtractFiltersAndInnerJoins extends
PredicateHelper {
case Filter(filterCondition, j @ Join(left, right, _: InnerLike,
joinCondition)) =>
val (plans, conditions) = flattenJoin(j)
(plans, conditions ++ splitConjunctivePredicates(filterCondition))
-
+ case p @ Project(_, j @ Join(_, _, _: InnerLike, _))
+ // Keep flattening joins when the project has attributes only
+ if p.projectList.forall(_.isInstanceOf[Attribute]) =>
+ flattenJoin(j)
case _ => (Seq((plan, parentJoinType)), Seq.empty)
}
- def unapply(plan: LogicalPlan): Option[(Seq[(LogicalPlan, InnerLike)],
Seq[Expression])]
- = plan match {
- case f @ Filter(filterCondition, j @ Join(_, _, joinType: InnerLike,
_)) =>
- Some(flattenJoin(f))
- case j @ Join(_, _, joinType, _) =>
- Some(flattenJoin(j))
- case _ => None
+ def unapply(plan: LogicalPlan): Option[(Seq[(LogicalPlan, InnerLike)],
Seq[Expression])] = {
+ val (plans, conditions) = flattenJoin(plan)
+ if (plans.size > 1) {
--- End diff --
aha, sounds good to me. Thanks!
---
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]