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

Julian Hyde updated CALCITE-1876:
---------------------------------
    Description: 
Create a rule to push the projections used in aggregate functions. From Julian 
Hyde:

bq. Calcite should realize that Aggregate has an implied Project (because it 
only uses a few columns) and push that projection into the CsvTableScan, but it 
doesn’t.

A query scans only the used projection when no aggregation is used:
{code}
explain plan for select name from emps;

CsvTableScan(table=[[SALES, EMPS]], fields=[[1]])
{code}

But it scans all the projections when an aggregation is used:
{code}
explain plan for select max(name) from emps;

EnumerableAggregate(group=[{}], EXPR$0=[MAX($1)])
  CsvTableScan(table=[[SALES, EMPS]], fields=[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])
{code}

  was:
>From Julian Hyde;
"Calcite should realize that Aggregate has an implied Project (because it only 
uses a few columns) and push that projection into the CsvTableScan, but it 
doesn’t."

A query scans only the used projection when no aggregation is used:
sql->explain plan for select name from emps;
CsvTableScan(table=[[SALES, EMPS]], fields=[[1]])

But it scans all the projections when an aggregation is used:
sql->explain plan for select max(name) from emps;
EnumerableAggregate(group=[{}], EXPR$0=[MAX($1)])
CsvTableScan(table=[[SALES, EMPS]], fields=[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])




> Push projections through Aggregate to CsvTableScan
> --------------------------------------------------
>
>                 Key: CALCITE-1876
>                 URL: https://issues.apache.org/jira/browse/CALCITE-1876
>             Project: Calcite
>          Issue Type: Improvement
>          Components: csv-adapter
>            Reporter: Luis Fernando Kauer
>            Assignee: Julian Hyde
>            Priority: Minor
>
> Create a rule to push the projections used in aggregate functions. From 
> Julian Hyde:
> bq. Calcite should realize that Aggregate has an implied Project (because it 
> only uses a few columns) and push that projection into the CsvTableScan, but 
> it doesn’t.
> A query scans only the used projection when no aggregation is used:
> {code}
> explain plan for select name from emps;
> CsvTableScan(table=[[SALES, EMPS]], fields=[[1]])
> {code}
> But it scans all the projections when an aggregation is used:
> {code}
> explain plan for select max(name) from emps;
> EnumerableAggregate(group=[{}], EXPR$0=[MAX($1)])
>   CsvTableScan(table=[[SALES, EMPS]], fields=[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])
> {code}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to