RelRoot说明

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: []

}

你可能感兴趣的:(RelRoot说明)