---
title: "Hive 表（HMS） - OceanBase 数据库 V4.4.2 | OceanBase 文档中心"
description: Hive 表（HMS） OceanBase 自 V4.4.1 版本起（MySQL 模式），支持通过 Hive Metastore（HMS）访问已在 HMS 中注册的 Hive 表。HMS 负责提供库、表、分区等元数据；表数据仍存放在 HDFS、OSS、S3 等外部存储中，OceanBase 不持有这些数据副本。 本文…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.4.2 LTS

# Hive 表（HMS）

更新时间：2026-06-24 20:11:47

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.4.2/zh-CN/620.obap/400.data-lake/200.data-lake-integration/100.hive/200.hms-external-table.md)  

OceanBase 自 V4.4.1 版本起（MySQL 模式），支持通过 Hive Metastore（HMS）访问已在 HMS 中注册的 Hive 表。HMS 负责提供库、表、分区等元数据；表数据仍存放在 HDFS、OSS、S3 等外部存储中，OceanBase 不持有这些数据副本。

本文说明如何通过 HMS 接入并查询 Hive 表。HMS Catalog 的创建语法、Kerberos 认证及 Location 配置细节，参见 [通过 Catalog 加载 Hive 表](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005282933)。

#### 说明

当前仅 OceanBase MySQL 模式支持通过 HMS 访问 Hive 表。

## 功能简介

通过 HMS 访问 Hive 表时，OceanBase 的执行过程分为两步：

1. **读取元数据**：通过 HMS Catalog 连接 Hive Metastore，获取 Hive 库、表、分区及存储路径等信息。
 2. **读取数据文件**：根据 HMS 返回的 `LOCATION` 等信息，从外部存储读取 ORC、Parquet 等格式的数据文件。

该方式适用于已在 Hadoop 生态中由 Hive 管理的表，用户无需在 OceanBase 中逐表手工定义列结构与文件路径。

**当前支持的操作：**

| 操作 | 支持情况 |
| --- | --- |
| `SELECT` 查询 | 支持 |
| `JOIN`、`GROUP BY` 等分析语句 | 支持 |
| 与 OceanBase 内表联邦查询 | 支持 |
| `INSERT`、`UPDATE`、`DELETE` | 不支持 |
| `DROP TABLE` 等 DDL | 不支持 |

## 前提条件

1. **版本与模式**：OceanBase V4.4.1 及以上，MySQL 模式租户。
 2. **HMS 服务**：OceanBase 集群可访问 Hive Metastore（Thrift 协议）。HMS 地址与端口由运维侧提供；开源 Hive 默认端口为 9083，实际部署可能不同。
 3. **存储访问**：所有 OBServer 节点对 Hive 表底层存储（HDFS、OSS、S3 等）具备读权限。底层存储为 HDFS 时，需部署 Java SDK 环境，参见 [部署 OceanBase 数据库 JAVA SDK 环境](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005282362)。
 4. **权限**：当前用户需具备 `CREATE CATALOG`、`USE CATALOG` 等 Catalog 相关权限；若使用 Kerberos 或受限 HDFS 路径，需额外在 Location 中配置相关认证凭据。

## HMS 外表访问模型

访问链路涉及三个层次，请勿混淆：

| 层次 | 作用 | 在 OceanBase 中的配置入口 |
| --- | --- | --- |
| **Catalog（HMS）** | 连接 Hive Metastore，获取 Hive 表元数据 | `CREATE EXTERNAL CATALOG ... TYPE = 'HMS'` |
| **Location（存储）** | 访问 HDFS 等存储上的数据文件及认证 | `CREATE LOCATION ...`（按场景可选） |
| **湖表格式（Hive）** | 表在 HMS 中的组织方式 | 由 HMS 侧已有表定义决定，OceanBase 读取元数据后访问 |

**要点：**

- HMS 是**元数据服务**，不是数据存储位置。
 - Hive 表的数据文件存放在 HMS 元数据中记录的 `LOCATION` 路径下。
 - Catalog 权限与存储读权限相互独立：具备 Catalog 权限不代表一定能读取底层文件。

若 Hive 表数据位于权限受限的 HDFS 路径，或集群启用了 Kerberos，需分别配置 HMS Catalog 与 Location。配置方式参见 [通过 Catalog 加载 Hive 表](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005282933) 中的认证说明。

## 操作步骤

### 步骤 1：创建 HMS Catalog

```sql
CREATE EXTERNAL CATALOG hive_prod
PROPERTIES (
    TYPE = 'HMS',
    URI = 'thrift://hms.example.com:9083'
);

```

若 HMS 或 HDFS 启用 Kerberos，需在 `PROPERTIES` 中补充 `PRINCIPAL`、`KEYTAB`、`KRB5CONF` 等参数。完整语法与参数说明参见 [通过 Catalog 加载 Hive 表](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005282933)。

### 步骤 2：（可选）创建 Location

当 Hive 表数据位于需显式指定用户或 Kerberos 凭据的 HDFS 路径时，创建 Location：

```sql
CREATE LOCATION hdfs_sales
URL = 'hdfs://namenode:8020/'
CREDENTIAL (
    USERNAME = 'hive'
);

```

如何确定 `URL`：在 Hive 中执行 `SHOW CREATE TABLE db.table`，从 `LOCATION` 字段提取存储根路径。

### 步骤 3：切换 Catalog 并查询

**方式一：切换会话上下文**

```sql
SET CATALOG hive_prod;
USE sales_db;

SELECT * FROM customer_log
WHERE dt = '20250401'
LIMIT 100;

```

**方式二：使用三段式标识符**

```sql
SELECT city, COUNT(*)
FROM hive_prod.sales_db.customer_log
WHERE dt >= '2025-04-01'
GROUP BY city;

```

### 步骤 4：联邦查询（可选）

```sql
SELECT o.order_id, h.city
FROM internal.trade_db.orders o
JOIN hive_prod.sales_db.customer h ON o.user_id = h.id;

```

## 查询示例

### 分区表查询

Hive 分区表的分区信息由 HMS 提供。查询时在 `WHERE` 子句中指定分区列，OceanBase 可下推分区裁剪，减少扫描范围。

SELECT product_id, SUM(amount)
FROM sales_detail
WHERE dt = '20250401' AND region = 'cn-east'
GROUP BY product_id;

```

### 查看表结构

```sql
DESC hive_prod.sales_db.sales_detail;

SHOW CREATE TABLE hive_prod.sales_db.sales_detail;

```

## 支持范围

### Hive 表与文件格式

| 表类型 | 支持的文件格式 | 说明 |
| --- | --- | --- |
| Hive 表 | ORC、Parquet、TextFile、CSV | 复杂类型当前版本仅支持 Parquet 格式的 ARRAY 类型 |

### 查询优化

在 HMS 元数据与存储访问正常的前提下，OceanBase 对 Hive 表查询支持：

- 分区裁剪：在 `WHERE` 中指定分区列时，可缩小扫描范围。
 - 列裁剪：仅读取 `SELECT` 涉及的列（取决于文件格式）。
 - 谓词下推：部分过滤条件下推至文件读取层（以执行计划为准）。

### Hive 版本

支持 Hive 1.2.x、2.3.x、3.1.x、4.x。不同 Hive 版本下表定义与存储路径格式可能存在差异，以 HMS 中实际元数据为准。

## 注意事项

1. **只读访问**：通过 HMS 访问的 Hive 表均为只读，不支持向 Hive 表写入或修改 HMS 侧表结构。
 2. **Catalog 与 Location 分层配置**：HMS 连接失败与 HDFS 读权限不足是两类不同问题，需分别排查。
 3. **网络部署**：HMS 与 OBServer 跨机房部署时，元数据获取延迟可能增加查询耗时；建议部署在同一低延迟网络内。
 4. **未注册到 HMS 的文件**：若数据文件未在 HMS 中注册为 Hive 表，不能使用本文所述方式访问；应使用 [文件外部表](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005282929) 或 [URL 外部表](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005282484)。
 5. **与 HMS Catalog 文档的分工**：本文侧重接入流程与查询使用；Kerberos、HDFS HA 等详细配置参见 [通过 Catalog 加载 Hive 表](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005282933)。

## 相关文档

- [通过 Catalog 加载 Hive 表](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005282933)
 - [Catalog 与外部表](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000006325512)
 - [CREATE EXTERNAL CATALOG](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005286499)
 - [SET CATALOG](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005286434)

---

**文档说明**

- **本篇重点**：说明 HMS 在 Hive 表访问链路中的角色，以及从创建 Catalog 到查询的操作流程与支持范围。
 - **与另外两篇的边界**：不涉及 Iceberg 表加载与能力说明（见 [通过 Catalog 加载 Iceberg 表](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000006325513)）；不涉及 ODPS API 外表映射（见 [ODPS 外部表](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000006325514)）。HMS Catalog 的详细参数与认证配置见 [通过 Catalog 加载 Hive 表](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005282933)，本篇不重复展开。

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
