本文翻譯自官網:Catalogs Beta https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/catalogs.html
Catalogs 提供元數據,例如數據庫,表,分區,視圖以及訪問存儲在數據庫或其他外部系統中的數據所需的功能和信息。
數據處理的最關鍵方面之一是管理元數據。它可能是臨時元數據,例如臨時表,或者是針對表環境注冊的 UDF。或永久性元數據,例如Hive Metastore 中的元數據。Catalogs 提供了一個統一的API,用於管理元數據並使其可從 Table API 和 SQL 查詢訪問。
Catalogs類型
GenericInMemory Catalog
Flink會話始終具有一個名為default_catalog的內置GenericInMemoryCatalog,它具有一個名為default_database的內置默認數據庫。 所有臨時元數據(例如使用TableEnvironment#registerTable定義的表)均已注冊到此目錄。
Hive Catalog
HiveCatalog 有兩個作用: 作為純Flink元數據的持久存儲,以及作為讀寫現有Hive元數據的接口。 Flink的Hive文檔提供了有關設置 catalog 以及與現有Hive安裝接口的完整詳細信息。
警告: Hive Metastore以小寫形式存儲所有元對象名稱。這與GenericInMemoryCatalog
區分大小寫不同。
用戶定義的 Catalog
Catalog 是可插入的,用戶可以通過實現Catalog接口來開發自定義 Catalog。 要在SQL CLI中使用自定義 Catalog,用戶應通過實現CatalogFactory接口來開發 Catalog 及其相應的 CatalogFactory。
catalog factory 定義了一組屬性,用於在 SQL CLI 引導時配置 catalog 。 屬性集將傳遞給發現服務,在該服務中,服務將嘗試將這些屬性與CatalogFactory匹配並啟動相應的 catalog 實例。
Catalog API
注冊Catalog
用戶可以將其他 Catalog 注冊到現有的Flink會話中。
tableEnv.registerCatalog(new CustomCatalog("myCatalog"));
更改當前 Catalog 和數據庫
Flink將始終在當前 Catalog 和數據庫中搜索表,視圖和UDF。
tableEnv.useCatalog("myCatalog");
tableEnv.useDatabase("myDb");
通過以catalog.database.object形式提供標准名稱,可以訪問不是當前 catalog 中的元數據。
tableEnv.scan("not_the_current_catalog", "not_the_current_db", "my_table");
列出可用 Catalog
tableEnv.listCatalogs();
列出可用的數據庫
tableEnv.listDatabases();
列出可用表
tableEnv.listTables();
歡迎關注Flink菜鳥公眾號,會不定期更新Flink(開發技術)相關的推文