Hologres 使用 FDW
在 Hologres 或 PostgreSQL 中,FDW 是 Foreign Data Wrapper 的缩写。
✅ 什么是 FDW(Foreign Data Wrapper)
FDW 是 PostgreSQL 提供的一种插件机制,允许数据库通过定义 FOREIGN TABLE(外部表)的方式访问其他系统的数据。它充当 PostgreSQL 和外部数据源之间的“桥梁”或“驱动程序”。
🧠 类比:FDW 就像是“数据库驱动”(类似 JDBC 驱动),只不过它作用于表级别,让 PostgreSQL 能“看见”外部数据库的表并进行查询。
🚀 FDW 的作用
-
允许 PostgreSQL 或 Hologres 查询其他数据库或服务中的数据,就像查询本地表一样。
-
可以实现“联邦查询”(federated query),把多个系统的数据整合在一起分析。
-
某些 FDW 实现支持数据写入、事务处理、下推谓词等高级功能。
🧰 常见的 PostgreSQL FDW 插件
FDW 名称 | 支持的数据源 | 是否支持写入 |
---|---|---|
postgres_fdw | 其他 PostgreSQL 数据库 | ✅(读写) |
mysql_fdw | MySQL、MariaDB | ✅(部分写入) |
oracle_fdw | Oracle 数据库 | ✅(部分写入) |
file_fdw | CSV 文件、本地文件 | ❌(只读) |
mongodb_fdw | MongoDB | ❌ 或有限支持 |
odbc_fdw | 任意 ODBC 支持的数据源 | ❌(依赖驱动) |
需要安装和配置相应的 FDW 才能使用它,比如:
CREATE EXTENSION postgres_fdw;
然后就可以创建远程服务器并定义外部表。
🔹 Hologres 中的 FDW
Hologres 也基于 PostgreSQL FDW 框架构建,但它的 FDW 插件是阿里云官方定制的,并不开放扩展插件安装。它支持以下数据源作为外部数据源:
-
MaxCompute(odps_fdw)
-
Kafka(用于流式表)
-
OSS(通过文件接口)
-
AnalyticDB、Lindorm 等
这些都内置于 Hologres,通过 CREATE FOREIGN TABLE 访问,并不需要手动安装 FDW 插件。
🧪 示例:PostgreSQL 使用 FDW 访问另一个 PostgreSQL 数据库
-- 安装扩展
CREATE EXTENSION IF NOT EXISTS postgres_fdw;-- 创建一个外部服务器
CREATE SERVER foreign_pg_serverFOREIGN DATA WRAPPER postgres_fdwOPTIONS (host '192.168.1.100', dbname 'remote_db', port '5432');-- 创建用户映射
CREATE USER MAPPING FOR CURRENT_USERSERVER foreign_pg_serverOPTIONS (user 'remote_user', password 'remote_pass');-- 创建外部表(映射远端表)
CREATE FOREIGN TABLE remote_users (id INT,name TEXT
)
SERVER foreign_pg_server
OPTIONS (schema_name 'public', table_name 'users');
之后就可以执行:
SELECT * FROM remote_users;
就像访问本地表一样查询远程 PostgreSQL 表的数据。
✅ 总结一句话:
FDW 是 PostgreSQL(包括 Hologres)提供的一种机制,用于访问外部数据源。通过 FDW,可以把外部数据库或文件系统的数据“挂载”为本地表,从而实现跨源查询和数据整合。