问题描述
SELECT 2
FROM emp
使用 RelNode
创建上述查询的 RelBuilder
的代码:
builder.scan("EMP")
.project(builder.literal("2"))
.build();
RelNode
将如下所示:
LogicalProject($f0=['2'])
LogicalTableScan(table=[[scott,EMP]])
上面的 rel 有 LogicalTableScan
(LogicalTableScan(table=[[scott,EMP]])
) 的输入
SELECT COUNT(*) as __count__
FROM(
SELECT 2
FROM emp
)
以下代码用于使用 RelBuilder
创建 rel:
builder.scan("EMP")
.project(builder.literal("2"))
.aggregate(builder.groupKey(),builder.countStar("__count__"))
.build();
创建以下rel:
LogicalAggregate(group=[{}],__count__=[COUNT()])
LogicalTableScan(table=[[scott,EMP]])
上面的 rel 不应该有 LogicalProject
的输入,也就是这个 LogicalProject($f0=['2'])
) 而不是 LogicalTableScan
吗?请谁能解释一下。
Edit1:我发现在使用 LogicalAggregate
创建 builder.aggrgate(...)
时,代码有一个 if 检查是
if (config.pruneInputOfAggregate && r instanceof Project) {...}
修剪 LogicalProject
的地方。如何在创建 config.pruneInputOfAggregate
之前将此 RelBuilder
标志设置为 false/true(根据我的偏好)。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)