首页 > > > 用PostgreSQL FDW做敏捷式数据融合
尝试过用Kettle做数据融合,但当数据量大的时候kettle严重依赖网速,速度慢。而且依赖可视化工具来做数据融合除了问题调试也比较麻烦,这些因素累加在一起让数据融合变成了一个比较重的工作,影响整个数据团队的工作效率。而PostgreSQL FDW模块可以直接操作其他数据库中的数据,这让更敏捷的数据融合成为了可能。
FDW是foreign-data wrapper的缩写,见名知意,就是将外部数据包装为sql可操作数据的模块,现在支持的外部数据源有上百种,从文件系统、到关系型数据库,nosql数据库、大数据平台都可以Wrap(在官方wiki里可以看到详细的列表 https://wiki.postgresql.org/wiki/Foreign_data_wrappers ),下面我们通过接几个主要的数据源来体验下FDW这风骚的操作~
在这些wrapper里最简单的应该是文件系统,
比如把linux /etc/passwd这个文件变成一个passwd表,可以这样操作
create extension file_fdw;
create server file_fdw_server foreign data wrapper file_fdw;
create foreign table passwd(username text,pass text,uid int4,gid int4, gecos text,home text,shell text)
server file_fdw_server options (format 'text',filename '/etc/passwd',delimiter ':',null'');
select * from passwd limit 5;
最常用mysql数据库,包装mysql数据库需要用mysql_fdw模块,这个需要我们先从源码编译
提示:通过apt安装的postgresql会报错,postgresql最好也自己编译安装 Ubuntu 18.04编译安装Postgresql
git clone https://github.com/EnterpriseDB/mysql_fdw.git
cd mysql_fdw
export PATH=/usr/local/pgsql/bin/:$PATH
export PATH=/usr/local/mysql/bin/:$PATH
make USE_PGXS=1
make USE_PGXS=1 install装好mysql_fdw模块便可以在postgresql里直接驱动mysql里的表
举个栗子,我在mysql test这个数据库里有个animals表

在postgresql里便可以这样操作:
CREATE EXTENSION mysql_fdw;
CREATE SERVER mysql_server FOREIGN DATA WRAPPER mysql_fdw OPTIONS (host '127.0.0.1', port '3306');
CREATE USER MAPPING FOR postgres SERVER mysql_server OPTIONS (username 'root', password 'root');
CREATE FOREIGN TABLE animals(
id int, name text, age int, color text
) SERVER mysql_server OPTIONS (dbname 'test', table_name 'animals');
select * from animals ;
NoSQL数据库最典型的代表应该是MongoDB了,fdw接mongodb是通过mongo_fdw模块实现的,要使用这个模块同样要先编译安装 PostgreSQL MongoDB FDW安装部署与使用
#安装GNU Autotools
sudo apt-get install autotools-dev autoconf
#安装libbson
git clone https://github.com/mongodb/libbson;
cd libbson;
git checkout 1.3.1;
./autogen.sh;
make && sudo make install;
#安装mongo-c-driver
git clone https://github.com/mongodb/mongo-c-driver
cd mongo-c-driver;
git checkout 1.3.1;
./autogen.sh;
./configure --with-libbson=system;
make && sudo make install;
#安装fdw
git clone https://github.com/EnterpriseDB/mongo_fdw.git
cd mongo_fdw
git submodule update --init --recursive
sudo autogen.sh --with-master
# 打开jsonc目录
# ./configure完了可不要急着Make,这个版本的json-c编译参数有问题。
# 打开Makefile,找到CFLAGS,在编译参数后面添加-fPIC mongo_fdw安装好之后,fdw连接建立方式和上面连mysql的方式是一样的
CREATE EXTENSION mongo_fdw;
CREATE SERVER mongo_server
FOREIGN DATA WRAPPER mongo_fdw
OPTIONS (address '127.0.0.1', port '27017');
CREATE USER MAPPING FOR postgres
SERVER mongo_server
OPTIONS (username 'mongo_user', password 'mongo_pass');
CREATE FOREIGN TABLE employees(
_id NAME,
name text )
SERVER mongo_server
OPTIONS (database 'test', collection 'employees');然后就可以使用了~

最后按照惯例还是给出官方文档,有兴趣的自己深入吧
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3123257/ ,如需转载,请注明出处,否则将追究法律责任。