[英]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.