[英]how to build sql from RelBuild without schema info?
我想使用方解石生成 sql。 像这样
org.apache.calcite.rel.rel2sql.RelToSqlConverterTest#testAntiJoin
final FrameworkConfig frameworkConfig = Frameworks.newConfigBuilder()
.parserConfig(SqlParser.Config.DEFAULT)
// .defaultSchema(schema)
.build();
final RelBuilder builder = RelBuilder.create(frameworkConfig);
final RelBuilder builder = relBuilder();
final RelNode root = builder
.scan("DEPT")
.scan("EMP")
.join(
JoinRelType.ANTI, builder.equals(
builder.field(2, 1, "DEPTNO"),
builder.field(2, 0, "DEPTNO")))
.project(builder.field("DEPTNO"))
.build();
但如果我不设置架构,则会抛出未找到的异常表。 有没有办法在没有架构信息的情况下生成 sql。
目的是生成 sql。 只需生成 sql。
RelBuilder
中只有一种方法使用RelOptSchema
: scan(String...)
(及其变体Scan(Iterable<String>)
)。 当您认为RelOptSchema
的目的是作为目录服务时,这是有道理的,将表名(或表路径,由具有目录和/或模式名限定的表名组成)转换为RelOptTable
object。
如果您有未通过命名空间访问的“独立”表对象,则可以直接创建TableScan
关系表达式,然后调用RelBuilder.push(RelNode)
将它们添加到堆栈中。 由于您从不调用RelBuilder.scan
您可以使用 null RelOptSchema
RelBuilder
但是在您的情况下,您似乎没有独立的表格对象。 这对 Calcite 来说是个问题,因为它需要知道您的“EMP”表有一个名为“DEPTNO”的字段,并且它的类型为INTEGER
。
所以我建议您创建一个包含类型信息但不一定由真实表支持的“虚拟”模式。 在 Calcite 的几个测试中使用的MockCatalogReader
class 是一个很好的例子。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.