GitHub user chenghao-intel opened a pull request:

    https://github.com/apache/spark/pull/8494

    [SPARK-10327][SQL] Cache Table is not working while subquery has alias in 
its project list

    ```scala
        import org.apache.spark.sql.hive.execution.HiveTableScan
        sql("select key, value, key + 1 from src").registerTempTable("abc")
        cacheTable("abc")
    
        val sparkPlan = sql(
          """select a.key, b.key, c.key from
            |abc a join abc b on a.key=b.key
            |join abc c on a.key=c.key""".stripMargin).queryExecution.sparkPlan
    
        assert(sparkPlan.collect { case e: InMemoryColumnarTableScan => e 
}.size === 3) // failed
        assert(sparkPlan.collect { case e: HiveTableScan => e }.size === 0) // 
failed
    ```
    
    The actual plan is:
    
    ```
    == Parsed Logical Plan ==
    'Project 
[unresolvedalias('a.key),unresolvedalias('b.key),unresolvedalias('c.key)]
     'Join Inner, Some(('a.key = 'c.key))
      'Join Inner, Some(('a.key = 'b.key))
       'UnresolvedRelation [abc], Some(a)
       'UnresolvedRelation [abc], Some(b)
      'UnresolvedRelation [abc], Some(c)
    
    == Analyzed Logical Plan ==
    key: int, key: int, key: int
    Project [key#14,key#61,key#66]
     Join Inner, Some((key#14 = key#66))
      Join Inner, Some((key#14 = key#61))
       Subquery a
        Subquery abc
         Project [key#14,value#15,(key#14 + 1) AS _c2#16]
          MetastoreRelation default, src, None
       Subquery b
        Subquery abc
         Project [key#61,value#62,(key#61 + 1) AS _c2#58]
          MetastoreRelation default, src, None
      Subquery c
       Subquery abc
        Project [key#66,value#67,(key#66 + 1) AS _c2#63]
         MetastoreRelation default, src, None
    
    == Optimized Logical Plan ==
    Project [key#14,key#61,key#66]
     Join Inner, Some((key#14 = key#66))
      Project [key#14,key#61]
       Join Inner, Some((key#14 = key#61))
        Project [key#14]
         InMemoryRelation [key#14,value#15,_c2#16], true, 10000, 
StorageLevel(true, true, false, true, 1), (Project [key#14,value#15,(key#14 + 
1) AS _c2#16]), Some(abc)
        Project [key#61]
         MetastoreRelation default, src, None
      Project [key#66]
       MetastoreRelation default, src, None
    
    == Physical Plan ==
    TungstenProject [key#14,key#61,key#66]
     BroadcastHashJoin [key#14], [key#66], BuildRight
      TungstenProject [key#14,key#61]
       BroadcastHashJoin [key#14], [key#61], BuildRight
        ConvertToUnsafe
         InMemoryColumnarTableScan [key#14], (InMemoryRelation 
[key#14,value#15,_c2#16], true, 10000, StorageLevel(true, true, false, true, 
1), (Project [key#14,value#15,(key#14 + 1) AS _c2#16]), Some(abc))
        ConvertToUnsafe
         HiveTableScan [key#61], (MetastoreRelation default, src, None)
      ConvertToUnsafe
       HiveTableScan [key#66], (MetastoreRelation default, src, None)
    ```

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/chenghao-intel/spark weird_cache

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/spark/pull/8494.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #8494
    
----
commit bfd40d999b6530bc04fc03ea6591c0093e10e534
Author: Cheng Hao <[email protected]>
Date:   2015-08-28T02:41:56Z

    Cache Table is not working while subquery has alias in its project list

----


---
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