ITPub博客

首页 > > > 用PostgreSQL FDW做敏捷式数据融合

用PostgreSQL FDW做敏捷式数据融合

作者:浪花小雨滴 时间:2020-06-17 17:01:13 0 删除 编辑

尝试过用Kettle做数据融合,但当数据量大的时候kettle严重依赖网速,速度慢。而且依赖可视化工具来做数据融合除了问题调试也比较麻烦,这些因素累加在一起让数据融合变成了一个比较重的工作,影响整个数据团队的工作效率。而PostgreSQL FDW模块可以直接操作其他数据库中的数据,这让更敏捷的数据融合成为了可能。

FDW是foreign-data wrapper的缩写,见名知意,就是将外部数据包装为sql可操作数据的模块,现在支持的外部数据源有上百种,从文件系统、到关系型数据库,nosql数据库、大数据平台都可以Wrap(在官方wiki里可以看到详细的列表 wiki.postgresql.org/wik ),下面我们通过接几个主要的数据源来体验下FDW这风骚的操作~

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;



FDW接关系型数据库

最常用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 ;



FDW接NoSQL数据库

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');

然后就可以使用了~



最后按照惯例还是给出官方文档,有兴趣的自己深入吧

Documentation: 9.3: postgres_fdw

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3123257/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: PostgreSQL内核
请登录后发表评论 登录
全部评论

注册时间:2018-05-16

  • 博文量
    4259
  • 访问量
    40075