Flink系列--Flink catalog

Catalog 提供了元数据信息,例如数据库、表、分区、视图以及数据库或其他外部系统中存储的函数和信息。

数据处理最关键的方面之一是管理元数据。 元数据可以是临时的,例如临时表、或者通过 TableEnvironment 注册的 UDF。 元数据也可以是持久化的,例如 Hive Metastore 中的元数据。Catalog 提供了一个统一的API,用于管理元数据,并使其可以从 Table API 和 SQL 查询语句中来访问。

简单来说,Catalog 就是元数据管理中心,其中元数据包括数据库、表、表结构等信息

 

 

从上图我们可以看到 Catalog 的最终实现有三个类:

  • HiveCatalog:使用 Hive 的元数据来作为 Flink 的 HiveCatalog
  • GenericInMemoryCatalog:使用内存实现 Catalog
  • JdbcCatalog:使用其他支持 jdbc 协议的关系型数据库来存储元数据
  • PostgresCatalog:使用 Postgres 数据库来作为 Catalog 存储元数据

示例: hiveCatalog的使用

// 环境准备
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        env.setParallelism(1);

        StreamTableEnvironment tableEnv = StreamTableEnvironment.create(env);

        /**
         * 创建 hivecatalog
         *
         * my_hive catalog 名称(随意
         * database 指定数据库
         * dir/ 配置hive-site.xml 的目录。
         */
        HiveCatalog hiveCatalog = new HiveCatalog("my_hive", "database", "dir/");

        /**
         * 注册Catalog
         * my_hive2 名称随意,通常和  new HiveCatalog 中的一致
         */
        tableEnv.registerCatalog("my_hive2",hiveCatalog);

        /**
         * 指定数据库,查询
         * my_hive tableEnv.registerCatalog 中指定的
         * gmall :库名
         * student:表名
         */
        tableEnv.sqlQuery("select * from my_hive2.database.student").execute().print();
tableEnv.useCatalog("my_hive2");
tableEnv.useDatabase("database");

 

posted @ 2022-09-21 16:00  life_start  阅读(230)  评论(0编辑  收藏  举报