在阿里云的大数据和实时数仓产品中,MaxCompute 和 Hologres 都支持类似于 EXTERNAL TABLE 和 FOREIGN TABLE 的机制,但它们的实现和语义有所不同。
下面分别说明:
☁️ 一、MaxCompute 中的 EXTERNAL TABLE 和 FOREIGN TABLE
1. EXTERNAL TABLE in MaxCompute
MaxCompute 的 EXTERNAL TABLE 是指外部表,用于读取 不属于 MaxCompute 本地存储的数据,主要用于对接外部数据源,比如:
- OSS 文件(CSV、ORC、Parquet)
- Hive 表(EMR)
- 数据湖(如 Apache Iceberg)
它只是一个“映射”,不在 MaxCompute 中存储数据。
特点:
- 数据不在 MaxCompute 中,而是存在外部系统。
- 常用于 “数仓 + 数据湖” 场景。
- 适用于大规模历史数据(冷数据)处理。
示例(OSS 外部表):
CREATE EXTERNAL TABLE oss_table (id BIGINT,name STRING
)
STORED BY 'com.aliyun.odps.CsvStorageHandler'
WITH SERDEPROPERTIES ('odps.properties.rolearn' = '<OSS角色ARN>','odps.properties.endpoint' = 'oss-cn-beijing.aliyuncs.com','odps.properties.bucket' = 'my-bucket','odps.properties.path' = 'path/to/data/'
);
2. FOREIGN TABLE in MaxCompute
MaxCompute 的 FOREIGN TABLE 是用来访问其他 数据库系统中的表数据,比如:
- RDS(MySQL、PostgreSQL)
- Hologres
- AnalyticDB
- PolarDB 等
它实际上通过 Data Integration 或 Federated Query 进行数据对接。
特点:
- 用于跨数据源联邦查询(Federated Query)
- 类似 PostgreSQL 中 FDW 的概念
- 访问外部 OLTP/OLAP 数据库中的结构化数据
- 可以通过
CREATE FOREIGN TABLE
语法定义映射
示例(访问 Hologres):
CREATE FOREIGN TABLE hologres_table (id BIGINT,name STRING
)
STORED BY 'com.aliyun.odps.FederatedStorageHandler'
WITH SERDEPROPERTIES ('odps.federated.source' = 'hologres','odps.federated.source.endpoint' = 'hg-cn-beijing.xxx.hologres.aliyuncs.com:80','odps.federated.source.database' = 'my_hologres_db','odps.federated.source.user' = 'my_user','odps.federated.source.password' = '******'
);
🚀 二、Hologres 中的 FOREIGN TABLE 和 EXTERNAL TABLE
Hologres 本身是基于 PostgreSQL 构建的高性能实时数据仓库,因此支持 PostgreSQL 风格的 FOREIGN TABLE。但其定义上并没有“EXTERNAL TABLE”的语法,而是将所有外部表统一称作 FOREIGN TABLE。
Hologres FOREIGN TABLE
Hologres 的 FOREIGN TABLE 用于访问外部数据源,比如:
- MaxCompute(常见)
- Object Storage Service (OSS)
- AnalyticDB
- Kafka(通过流表机制)
- 本地 PostgreSQL 外表机制
Hologres 中定义 FOREIGN TABLE 的典型用途是访问 MaxCompute 表(用于实现实时+离线混合分析)。
示例(访问 MaxCompute 表):
CREATE FOREIGN TABLE mc_table (id BIGINT,name TEXT
)
SERVER odps_server
OPTIONS (project_name 'my_project',table_name 'my_odps_table',access_id 'xxx',access_key 'yyy',endpoint 'http://service.odps.aliyun.com/api'
);
特点:
- FOREIGN TABLE 是对 MaxCompute 表的“轻映射”
- 查询是按需、实时拉取数据(不落地)
- 适合在实时数仓中联动离线仓数据(冷热分层)
📌 Hologres 中没有独立的 “EXTERNAL TABLE” 类型,统一通过 FOREIGN TABLE 实现联邦数据访问。
✅ 总结对比表(按平台)
平台 | 表类型 | 访问对象 | 是否存储数据 | 是否支持写入 | 典型用法 |
MaxCompute | EXTERNAL TABLE | OSS、数据湖、Hive | ❌ | ❌ | 读取外部大数据文件(数据湖) |
MaxCompute | FOREIGN TABLE | RDS、Hologres、AnalyticDB 等 | ❌ | 部分支持 | 联邦查询,访问在线数据库系统 |
Hologres | FOREIGN TABLE | MaxCompute、OSS、A-DB、Kafka 等 | ❌ | ❌ | 实时访问外部数仓或流系统数据 |