首页 > 解决方案 > FROM 子句本身有查询的查询的 RelNode

问题描述

我想从我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 )吗?这该怎么做 ?

标签: apache-calcite

解决方案


只需简单地创建一个内部子查询的 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()


推荐阅读