概念
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)