如何解决LogicalAggregate 的输入是 LogicalTableScan 而不是 LogicalProject
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 举报,一经查实,本站将立刻删除。