Details
-
Improvement
-
Status: Closed
-
Minor
-
Resolution: Fixed
-
None
-
None
Description
Create a rule to push the projections used in aggregate functions. 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:
explain plan for select name from emps;
CsvTableScan(table=[[SALES, EMPS]], fields=[[1]])
But it scans all the projections when an aggregation is used:
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]])