问题描述
我想从我的ORDER BY
列id
的表中获得结果,并且我不希望在结果中出现id
。我可以使用以下查询来实现。
SELECT COALESCE (col1,'**')
FROM (select col1,id FROM myDataSet.myTable WHERE col4 = 'some filter' ORDER BY id);
现在,我想创建上述查询的RelNode。据我所知,方解石中要执行表扫描,只有两种方法scan(String tableName)
和scan(Iterable<String> tableNames)
。有没有办法scan(RelNode )
?该怎么做?
解决方法
查询
select col1,col2,col2 FROM myDataSet.myTable WHERE col4 = 'some filter' ORDER BY id
还应该给您想要的结果。
如果要表示您直接编写的查询,则可以在from子句中为查询构造一个RelNode
,从扫描myDataSet.myTable
开始,添加过滤器,和命令。然后,您可以投影所需的特定列集。
只需创建内部子查询的RelNode并在其顶部创建另一个投影。像这样。
builder.scan('myTable')
.filter(builder.call(SqlStdOperator.EQUALS,builder.field(col4),builder.literal('some filter') )))
.project(builder.field('col1'),builder.field('id'))
.sort(builder.field('id'))
.project(builder.call(SqlStdOperator.COALESCE(builder.field('col1'),builder.literal('**'))))
.build()