FROM 子句本身有查询的查询的 RelNode
RelNode of a query in which FROM clause itself has a query
我想从 table 获得结果,其中 ORDER BY
列 id
并且我不希望 id
出现在结果中。我可以使用以下查询实现此目的。
SELECT COALESCE (col1, '**')
FROM (select col1, id FROM myDataSet.myTable WHERE col4 = 'some filter' ORDER BY id);
现在,我想为上述查询创建一个 RelNode。据我所知,在方解石中,要进行table扫描,只有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()
我想从 table 获得结果,其中 ORDER BY
列 id
并且我不希望 id
出现在结果中。我可以使用以下查询实现此目的。
SELECT COALESCE (col1, '**')
FROM (select col1, id FROM myDataSet.myTable WHERE col4 = 'some filter' ORDER BY id);
现在,我想为上述查询创建一个 RelNode。据我所知,在方解石中,要进行table扫描,只有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()