You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@spark.apache.org by "Dongjoon Hyun (JIRA)" <ji...@apache.org> on 2016/06/25 21:08:37 UTC

[jira] [Updated] (SPARK-16208) Add `CollapseEmptyPlan` optimizer

     [ https://issues.apache.org/jira/browse/SPARK-16208?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Dongjoon Hyun updated SPARK-16208:
----------------------------------
    Description: 
This PR adds a new logical optimizer, `CollapseEmptyPlan`, to collapse a logical plans consisting of only empty LocalRelations. The only exceptional logical plan is aggregation. For aggregation plan, only simple cases are consider for this optimization.

**Before**
{code}
scala> sql("select a from values (1,2) T(a,b) where 1=0 group by a,b having a>1 order by a,b").explain
== Physical Plan ==
*Project [a#11]
+- *Sort [a#11 ASC, b#12 ASC], true, 0
   +- Exchange rangepartitioning(a#11 ASC, b#12 ASC, 200)
      +- *HashAggregate(keys=[a#11, b#12], functions=[])
         +- Exchange hashpartitioning(a#11, b#12, 200)
            +- *HashAggregate(keys=[a#11, b#12], functions=[])
               +- LocalTableScan <empty>, [a#11, b#12]
{code}

**After**
{code}
scala> sql("select a from values (1,2) T(a,b) where 1=0 group by a,b having a>1 order by a,b").explain
== Physical Plan ==
LocalTableScan <empty>, [a#0]
{code}

  was:
This issue adds a new logical optimizer, `CollapseEmptyPlan`, to collapse a logical plain consisting of only empty LocalRelations.

**Before**
{code}
scala> sql("select a from (select explode(array(1,2,3)) a) where 1=0 group by a having count(*)>1 order by a").explain
== Physical Plan ==
*Sort [a#15 ASC], true, 0
+- Exchange rangepartitioning(a#15 ASC, 200)
   +- *Project [a#15]
      +- *Filter (count(1)#17L > 1)
         +- *HashAggregate(keys=[a#15], functions=[count(1)])
            +- Exchange hashpartitioning(a#15, 200)
               +- *HashAggregate(keys=[a#15], functions=[partial_count(1)])
                  +- Generate explode([1,2,3]), false, false, [a#15]
                     +- LocalTableScan <empty>
{code}

**After**
{code}
scala> sql("select a from (select explode(array(1,2,3)) a) where 1=0 group by a having count(*)>1 order by a").explain
== Physical Plan ==
LocalTableScan <empty>, [a#15]
{code}


> Add `CollapseEmptyPlan` optimizer
> ---------------------------------
>
>                 Key: SPARK-16208
>                 URL: https://issues.apache.org/jira/browse/SPARK-16208
>             Project: Spark
>          Issue Type: Improvement
>          Components: SQL
>            Reporter: Dongjoon Hyun
>            Assignee: Apache Spark
>            Priority: Minor
>
> This PR adds a new logical optimizer, `CollapseEmptyPlan`, to collapse a logical plans consisting of only empty LocalRelations. The only exceptional logical plan is aggregation. For aggregation plan, only simple cases are consider for this optimization.
> **Before**
> {code}
> scala> sql("select a from values (1,2) T(a,b) where 1=0 group by a,b having a>1 order by a,b").explain
> == Physical Plan ==
> *Project [a#11]
> +- *Sort [a#11 ASC, b#12 ASC], true, 0
>    +- Exchange rangepartitioning(a#11 ASC, b#12 ASC, 200)
>       +- *HashAggregate(keys=[a#11, b#12], functions=[])
>          +- Exchange hashpartitioning(a#11, b#12, 200)
>             +- *HashAggregate(keys=[a#11, b#12], functions=[])
>                +- LocalTableScan <empty>, [a#11, b#12]
> {code}
> **After**
> {code}
> scala> sql("select a from values (1,2) T(a,b) where 1=0 group by a,b having a>1 order by a,b").explain
> == Physical Plan ==
> LocalTableScan <empty>, [a#0]
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@spark.apache.org
For additional commands, e-mail: issues-help@spark.apache.org