在阿里云的大數據和實時數倉產品中,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 等 | ? | ? | 實時訪問外部數倉或流系統數據 |