Flink-源码学习-API-Catalog 体系
一、概述
数据处理最关键的方面之一是管理元数据。元数据可以是临时的,如临时表、或者通过 TableEnvironment 注册的 UDF。元数据也可以是持久化的,例如 HiveMetastore 中的元数据。
Catalog 提供了一个统一的 API,用于管理元数据,如数据库、表、分区、视图以及数据库或其他外部系统中存储的函数和信息,并使其可以从 Table API 和 SQL 查询语句中来访问。
二、元数据 Catalog API 设计
Catalog 在 Flink 中提供了一个统一的 API,用于管理元数据,Catalog 提供了元数据信息,例如数据库、表、分区、视图以及数据库或其他外部系统中存储的函数和信息。
2.1. 元数据模型
Flink 的元数据模型定义了任务的元数据结构,如数据库、表、视图、函数等,Flink 定义了 4 类接口分别对应于 4 种元数据类型,元数据类型之间的层次关系如图,最顶层的 Catalog 是元数据的容器。

2.1.1. 数据库
数据库等同于数据库中的库实例,接口定义为 CatalogDatabase,定义数据库实例的元数据,一个数据库实例中包含表、视图、函数等多种对象

2.1.2. 表和视图
在 Catalog 中,每一张表对应的是一个 CatalogBaseTable 对象,CatalogBaseTable 及其子类的继承关系如下图:
Catalog 中管理的表大致可以分为两类,一类是表所对应的 CatalogTable,另一类则是视图所对应的 CatalogView。
2.1.3. 函数 CatalogFunction
Catalog 中的函数元数据的接口。函数元数据包含了函数所在的类信息和编程语言

2.2. 元数据管理
2.2.1. CatalogManager
Flink 通过定义类 CatalogManager 来组织当前系统中可用的 Catalog 和设置、查询当前 Catalog 等的信息。
2.2.2. 实现 AbstractCatalog
Catalog 用来管理的核心抽象,Catalog 接口中定义了一系列元数据管理的方法。目前 Flink 中实现了内存型 GenericInMemoryCatalog、HiveCatalog 和 AbstractJdbcCatalog。

内存型 GenericInMemoryCatalog
内存型 Catalog 元数据在内存中临时保存,无持久化存储,在 SQL 校验和优化过程中使用。GenericlnMemoryCatalog ,把所有的元数据都保存在 Flink Client 端的内存里,元数据的生命周期跟 SQL Client 的 Session 周期一样,当 Session 结束,在 Session 里面创建的元数据也就自动的丢失了。
Hive
GenericlnMemoryCatalog 是临时,无持久化,其中的元数据无法在团队间共享。对接 Hive 的元数据,既可以与 Hadoop 生态直接打通,又能利用 Hive 存储元数据,一次创建多次使用。Jdbc
三、Flink Table/SQL 元数据设计
为了使用 SQL,首先需要解决的是元数据管理的问题。包括 Table/UDF/View 元数据的注册、查询以及验证。
四、自定义 Catalog
Flink Catalog 是扩展的,支持用户自定义。为了在 Flink SQL 中使用自定义 Catalog,用户需要通过实现 CatalogFactory 接口来实现对应的 Catalog 工厂。该工厂是使用 Java 的服务提供者接口 (SPI) 发现的。
可以将实现此接口的类添加到: META_INF/services/org.apache.flink.table.factories.FactoryJAR
- https://blog.csdn.net/qq_41463207/article/details/115677404
- https://mp.weixin.qq.com/s/LynPrZAjyMqGgeBkpUj17Q
五、总结
5.1. Refer
flink-docs
引用站外地址,不保证站点的可用性和安全性Flink-docsJoker