ZhangZhihui's Blog  

在 Hive 的语境下,Catalog(目录) 是元数据管理的高级抽象层。如果你把 Hive 比作一个图书馆,那么 Database 是书架,Table 是书,而 Catalog 就是整个图书馆的索引系统和管理边界

在 Hive 3.0 之前,元数据的顶层就是 Database;但从 Hive 3.0 开始,为了更好地支持多租户和跨系统集成,引入了 Catalog 概念。


1. Catalog 的结构层次

Catalog 位于元数据层级的最顶端,其完整的路径引用格式为:

catalog_name.database_name.table_name


2. Catalog 的核心作用

① 逻辑隔离与多租户

在一个大型组织中,不同的部门(如财务部、市场部)可能希望拥有完全独立的命名空间。

  • 用途: 允许在不同的 Catalog 中存在同名的数据库和表,而互不干扰。

  • 例子: finance.default.usersmarketing.default.users

② 联邦查询(Federated Querying)

这是 Catalog 最具威力的用途。Catalog 可以作为一个“连接器”,指向 Hive 之外的数据源。

  • 用途: 你可以定义一个名为 mysql_catalog 的目录,它实际上指向一个远程的 MySQL 数据库。

  • 效果: 你可以在一个 SQL 语句中跨 Catalog 关联数据:

    SELECT h.id, m.name 
    FROM hive.default.users h 
    JOIN mysql_catalog.sales_db.orders m ON h.id = m.user_id;
    

③ 标准化兼容(兼容 Spark/Iceberg)

现代大数据架构(如 Spark, Trino, Flink)都使用 Catalog 协议。

  • 用途: 方便 Hive 与其他引擎共享元数据。例如,Iceberg 必须通过指定的 Catalog 来管理其快照(Snapshot)和清单文件(Manifest),Hive 的 Catalog 功能使得它能更自然地作为 Iceberg 的元数据中心。


3. 常见的 Catalog 类型

Catalog 类型 说明
hive (默认) 指向传统的 Hive Metastore,管理存储在 HDFS/S3 上的表。
jdbc 通过 JDBC 映射外部关系型数据库(MySQL, Postgres 等)。
iceberg / paimon 专门用于管理数据湖格式元数据的目录。
custom 用户可以根据官方接口实现自定义的元数据读取逻辑。

4. 如何查看和切换 Catalog

在 Hive CLI 或 Beeline 中,你可以使用以下命令进行操作:

  • 查看所有 Catalog:

    SHOW CATALOGS;

  • 查看当前使用的 Catalog:

    SELECT current_catalog();

  • 切换 Catalog:

    USE CATALOG catalog_name;


总结

Catalog 解决了“元数据孤岛”问题。 它让 Hive 从一个单纯的“Hadoop 上的 SQL 引擎”,转变为一个能够感知并管理全域数据(包括 RDBMS、对象存储、数据湖)的数据网关

 

posted on 2025-12-24 19:58  ZhangZhihuiAAA  阅读(0)  评论(0)    收藏  举报