Github user xuanyuanking commented on a diff in the pull request:

    https://github.com/apache/spark/pull/22326#discussion_r214823799
  
    --- Diff: 
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/optimizer/Optimizer.scala
 ---
    @@ -1208,9 +1208,26 @@ object PushPredicateThroughJoin extends 
Rule[LogicalPlan] with PredicateHelper {
                 reduceLeftOption(And).map(Filter(_, left)).getOrElse(left)
               val newRight = rightJoinConditions.
                 reduceLeftOption(And).map(Filter(_, right)).getOrElse(right)
    -          val newJoinCond = commonJoinCondition.reduceLeftOption(And)
    -
    -          Join(newLeft, newRight, joinType, newJoinCond)
    +          val (newJoinConditions, others) =
    +            commonJoinCondition.partition(canEvaluateWithinJoin)
    +          val newJoinCond = newJoinConditions.reduceLeftOption(And)
    +          // if condition expression is unevaluable, it will be removed 
from
    +          // the new join conditions, if all conditions is unevaluable, we 
should
    +          // change the join type to CrossJoin.
    +          val newJoinType =
    +            if (commonJoinCondition.nonEmpty && newJoinCond.isEmpty) {
    +              logWarning(s"The whole 
commonJoinCondition:$commonJoinCondition of the join " +
    +                s"plan:\n $j is unevaluable, it will be ignored and the 
join plan will be " +
    --- End diff --
    
    The log will be shown like this:
    ```
    16:13:35.218 WARN 
org.apache.spark.sql.catalyst.optimizer.PushPredicateThroughJoin: The whole 
commonJoinCondition:List((dummyUDF(a#5, b#6) = dummyUDF(d#15, c#14))) of the 
join plan:
     Join Inner, (dummyUDF(a#5, b#6) = dummyUDF(d#15, c#14))
    :- LocalRelation [a#5, b#6]
    +- LocalRelation [c#14, d#15]
     is unevaluable, it will be ignored and the join plan will be turned to 
cross join.
    ```


---

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to