我理解这个是calcite的机制导致的。calcite并不知道Flink一共有多少层schema,其实Flink
自己抽象了三层,也就是catalog.database.table
但是配置CalciteCatalogReader的时候,需要配置一些默认的schema查找规则,这个Flink是配置了两个,
也就是默认的catalog 和 默认的catalog+默认的database
然后calcite在查找的时候会先尝试default_catalog.default_database作为schema,去查找a.b,此时会先把a当做table去查找,并且找不到。
接下来会default_catalog作为schema去查找a.b,此时就找到了。
刘首维 <
[hidden email]> 于2020年9月25日周五 下午3:41写道:
> Hi all,
>
>
> 今天在调试1.11 Flink 代码的时候,发现一个没太理解的现象
>
>
> 考虑以下code
>
>
>
> bsTableEnv.executeSql("create database a")
> bsTableEnv.executeSql( " CREATE TABLE a.b "(后略))
> bsTableEnv.executeSql("select * from a.b")
>
>
> 然后发现了以下现象:
>
>
> 从图中可以得知,在`DatabaseCalciteSchema` 中
> 我发现下面几个奇怪的点
>
> 1. databaseName 是 ‘'default'
> 2. getTable将 `a`作为参数传入,而不是b (a是库名,b是表名)
>
>
>
> 首先可以确定的是这个发生在validation阶段
>
> 其次我发现特意针对这块做了一次catch `TableNotExistException`的操作
>
> 请问这部分代码的用途和目的是?
>
>
>
>
--
Best,
Benchao Li