1  | 
  | 
可以借鉴的地方
根据传递的map,改变排序。
1  | 
  | 
aggregate.getGroupSet() = {0}.
map = { 0->7,1->0}.
newGroupSet = {7}.
获取agg所有用到的index
获取aggSet、aggCall所用到的index1
2
Set<Integer> interestingFields = RelOptUtil.getAllFields(aggregate)
获取project的input对应的index
1  | RexNode rex = project.getProjects().get(source)  | 
加入project的是input的7,0两个元素。
agg的是project的1,2.
那么通过上面的代码可以得到用到的是1对应input的7,2对应input的0.
改变aggCall数据源
1  | final Mappings.TargetMapping targetMapping = // 获取对应的mapping,将aggCall转为以input为数据源的aggCall  | 
old aggCall=COUNT(DISTINCT $1)
map={0->7,1->0}
通过转换,可以得到
aggCall=COUNT(DISTINCT $0)