> Query on carbon table should support reusing Exchange
> -----------------------------------------------------
>
> Key: CARBONDATA-3752
> URL:
https://issues.apache.org/jira/browse/CARBONDATA-3752> Project: CarbonData
> Issue Type: Improvement
> Reporter: David Cai
> Priority: Major
> Fix For: 2.0.0
>
> Time Spent: 50m
> Remaining Estimate: 0h
>
> Query on carbon table should support reusing Exchange
> [Reproduce]
> create table t1(c1 int, c2 string) using carbondata
> insert into t1 values(1, 'abc')
> explain
> select c2, sum(c1) from t1 group by c2
> union all
> select c2, sum(c1) from t1 group by c2
> [Physical Plan]
> {noformat}
> Union
> :- *(2) HashAggregate(keys=[c2#37], functions=[sum(cast(c1#36 as bigint))])
> : +- Exchange hashpartitioning(c2#37, 200)
> : +- *(1) HashAggregate(keys=[c2#37], functions=[partial_sum(cast(c1#36 as bigint))])
> : +- *(1) FileScan carbondata default.t1[c1#36,c2#37] ReadSchema: struct<c1:int,c2:string>
> +- *(4) HashAggregate(keys=[c2#37], functions=[sum(cast(c1#36 as bigint))])
> +- Exchange hashpartitioning(c2#37, 200)
> +- *(3) HashAggregate(keys=[c2#37], functions=[partial_sum(cast(c1#36 as bigint))])
> +- *(3) FileScan carbondata default.t1[c1#36,c2#37] ReadSchema: struct<c1:int,c2:string>{noformat}
> It should reuse Exchange like Following:
> {noformat}
> Union
> :- *(2) HashAggregate(keys=[c2#37], functions=[sum(cast(c1#36 as bigint))])
> : +- Exchange hashpartitioning(c2#37, 200)
> : +- *(1) HashAggregate(keys=[c2#37], functions=[partial_sum(cast(c1#36 as bigint))])
> : +- *(1) FileScan carbondata default.t1[c1#36,c2#37] ReadSchema: struct<c1:int,c2:string>
> +- *(4) HashAggregate(keys=[c2#37], functions=[sum(cast(c1#36 as bigint))])
> +- ReusedExchange [c2#37, sum#54L], Exchange hashpartitioning(c2#37, 200){noformat}