Github user dongjoon-hyun commented on a diff in the pull request:

    https://github.com/apache/spark/pull/14132#discussion_r70872438
  
    --- Diff: 
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/parser/AstBuilder.scala
 ---
    @@ -399,7 +402,16 @@ class AstBuilder extends SqlBaseBaseVisitor[AnyRef] 
with Logging {
        * separated) relations here, these get converted into a single plan by 
condition-less inner join.
        */
       override def visitFromClause(ctx: FromClauseContext): LogicalPlan = 
withOrigin(ctx) {
    -    val from = ctx.relation.asScala.map(plan).reduceLeft(Join(_, _, Inner, 
None))
    +    val relationPlan = ctx.relation.asScala.map {
    +      case jrc: JoinRelationContext if jrc.broadcast != null =>
    +        if (jrc.broadcast.left == null) { // default
    +          Hint("BROADCAST_RIGHT", Seq.empty[String], plan(jrc))
    --- End diff --
    
    Actually, I assumed two layers to make `parser` module as general as 
possible.
    
    - `Parser` and `AstBuilder` does not have the real logic for optimization.
    This is just a building rule to generate `Hint` annotation for later uses.
    
    - All the specific matching/optimization is handled by `Analyzer.scala` and 
`Optimizer.scala`. For `MAPJOIN` is handled by `Analyzer`.
    
    This will gave us a great freedom. For example, we can change this hint 
into another expression like `NewBroadcastHint`. This is unlikely, but just a 
example. :)
    
    Does it make sense to you?


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---

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

Reply via email to