RelNode树的根节点
RelRoot存在的一个重要的原因是处理类似这样的查询:
select name from emp order by empno desc
Calcite知道结果必须被排序,但不能代表它按照排序规则进行排序,因为结果中没有empno这个字段。但是我们可以这样表示:
RelRoot:{
rel:Sort($1,DESC)
Project(name,empno)
TableScan(EMP)
fields: [0]
collation: [1 DESC]
}
注意在结果中存在empno这个字段,但是字段面(fields)告诉使用者把它扔掉了
另外一个用例是类似这样的查询:
select name as n,name as n2,empno as n from emp
name字段有多个使用,并且有多个列用n作为别名,你可以这样来表示:
RelRoot:{
rel:Project(name,empno)
TableScan(EMP)
fields:[(0,"n"),(0,"n2"),(1,"n")]
collation: []
}
网友评论