概念
Catalog 提供了元数据信息,例如数据库、表、分区、视图以及数据库或其他外部系统中存储的函数和信息。
数据处理最关键的方面之一是管理元数据。 元数据可以是临时的,例如临时表、或者通过 TableEnvironment 注册的 UDF。 元数据也可以是持久化的,例如 Hive Metastore 中的元数据。Catalog 提供了一个统一的API,用于管理元数据,并使其可以从 Table API 和 SQL 查询语句中来访问。
Catalog类型
- GenericInMemoryCatalog
基于内存实现,所有元数据只在 session 的生命周期内可用
- JdbcCatalog
可以将 Flink 通过 JDBC 协议连接到关系数据库。Postgres Catalog 和 MySQL Catalog 是目前 JDBC Catalog 仅有的两种实现
- HiveCatalog
作为原生 Flink 元数据的持久化存储,以及作为读写现有 Hive 元数据的接口
- 用户自定义 Catalog
用户可以通过实现 Catalog 接口来开发自定义 Catalog,除了需要实现自定义的 Catalog 之外,还需要为这个 Catalog 实现对应的 CatalogFactory 接口
设计
新的 Catalog 有三层结构,最顶层是 Catalog 的名字,中间一 层是 Database,最底层是各种 MetaObject,如 Table,Partition,Function 等
Catalog
- 支持 Create,Drop,List,Alter,Exists 等语句
- 支持对 Database,Table,View, Partition,Function,Statistics等的操作
CatalogManager 正如它名字一样,主要是用来管理 Catalog。
CatalogManager 支持的操作包括:
- 注册 Catalog(registerCatalog)
- 获取所有的 Catalog(getCatalogs)
- 获取特定的 Catalog(getCatalog)
- 获取当前的 Catalog(getCurrentCatalog)
- 设置当前的 Catalog(setCurrentCatalog)
- 获取当前的 Database(getCurrentDatabase)
- 设置当前的 Database(setCurrentDatabase)
参考
- https://nightlies.apache.org/flink/flink-docs-master/zh/docs/dev/table/catalogs/