首批通过分布式安全可靠测评,为关键业务系统打造
关于外表与外部文件
更新时间:2026-07-02 18:41:33
外表(External Table)的数据存储在 OceanBase 集群外部的存储系统中(本地目录、对象存储、HDFS、MaxCompute 等),数据库内仅保存元数据与访问路径。创建成功后,可像普通表一样用于 SELECT、JOIN、聚合等,但只读,不支持 DML、约束与索引。
与普通表的差异:
| 特性 | 外表 | 普通表 |
|---|---|---|
| 数据位置 | 外部存储 | OceanBase 内部 |
| 读写 | 外表只读:可 SELECT,不能对其执行 INSERT、UPDATE、DELETE 等 DML。 |
读写 |
| 约束与索引 | 不支持主键、唯一、外键等约束,不支持创建索引。 | 支持 |
| 典型性能 | 受网络与外部系统影响 | 本地访问更快 |
注意事项
- 创建外表时,系统根据
LOCATION与PATTERN将匹配的文件列表写入系统表;扫描时按该列表访问外部文件。 - 外部目录新增文件不会自动出现在列表中,需执行 更新外表文件列表 或参见 管理外部文件。
- 外部文件已删除时,查询通常不报错,对应文件返回空结果。
- 外部文件被修改时,查询读到最新内容;查询与外部文件并发修改可能导致结果不符合预期,应避免在查询期间修改文件。
外部数据访问方式
OceanBase 提供多种访问外部数据的方式。请先根据是否需要持久化表对象、是否频繁重复查询同一批文件来选择:
| 方式 | 是否创建表对象 | 典型场景 | 语法与文档入口 |
|---|---|---|---|
| 外表(CREATE EXTERNAL TABLE) | 是,元数据持久化 | 需反复查询、需 JOIN 内表、需管理文件列表与分区 | CREATE EXTERNAL TABLE、创建和查询外表 |
| FILES 表函数 | 否,即席查询 | 临时探查、一次性读取、LOAD DATA 数据源 | FILES 表函数、URL 外表(无元数据) |
| External Catalog | 连接外部目录 | 查询 Hive / Iceberg / ODPS 等湖仓表,元数据由 Catalog 同步 | CREATE EXTERNAL CATALOG 语法、Catalog 与外部表 |
说明
无元数据场景下,除 FILES() 外,还可使用 SELECT 中的 Location URL 形式直接读文件,详见 URL 外表。文件格式(FORMAT)的完整参数说明以 CREATE EXTERNAL TABLE 为准。
HDFS 外表 与 ODPS 外部表
OceanBase 数据库支持通过外表访问不同类型的外部数据源,包括外部存储系统中的文件数据以及外部数据平台中的表数据。其中,HDFS 属于外部存储系统,ODPS(MaxCompute)属于外部数据平台。
HDFS 外表
Hadoop 分布式文件系统(HDFS)是 Hadoop 生态系统中的分布式存储系统。OceanBase 数据库自 V4.3.5 BP1 版本起支持通过外表访问 HDFS 中的数据。
使用 HDFS 外表前,需部署 部署 OceanBase 数据库 JAVA SDK 环境,并配置 ob_enable_java_env 等相关参数。有关语法说明,参见 CREATE EXTERNAL TABLE 中 LOCATION、FORMAT 相关内容。
ODPS(MaxCompute)外部表
ODPS(MaxCompute)是面向大规模数据处理的数据平台。OceanBase 数据库支持通过外表访问 ODPS 中的数据。
使用时,可通过外表的 PROPERTIES (TYPE = 'ODPS' ...) 指定外部数据源,API_MODE 支持 storage_api 或 tunnel_api。有关语法说明,参见 CREATE EXTERNAL TABLE 中 properties_type_options 相关内容。有关使用说明和示例,参见 ODPS 外部表。