apache-calcite - 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 )
吗?这该怎么做 ?
解决方案
只需简单地创建一个内部子查询的 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()
推荐阅读
- asp.net - 当从磁盘加载 HTML 时,使根相对 URL 也可以工作
- azure - Application Insights 能否与运行 .NET Core 3 运行时的 Linux Web 应用一起使用?
- sorting - 对列进行排序时移动整行(Google Apps 脚本)
- python - Networkx 没有从邻接矩阵返回一个漂亮的图
- powershell - Powershell 启动进程参数列表未正确处理冒号
- postgresql - 将超过 5000 万从 Pyspark df 写入 PostgresSQL,最有效的方法
- django - 如何通过超模的属性过滤模型对象?
- sql - BigQuery:按每个用户的最后日期选择值
- python - Python 用 BeautifulSoup 解析表
- javascript - 如何在javascript中将每个第一个字母大写,撇号之前没有,但之后有一个