Foreign Data Wrapper (FDW) 讓 PostgreSQL 能像操作本地表一樣查詢、寫入異構數據源。本文以 Ubuntu 為例,示範 mysql_fdw 連接 MySQL、hive_fdw (Multicorn) 連接 Hive 的完整流程。
# 安裝 PostgreSQL 客戶端/服務端/圖形工具
sudo apt-get install postgresql-client postgresql pgadmin3
# 建立超級用戶與測試庫
sudo -u postgres createuser --superuser syk
sudo -u postgres createdb -O syk test
psql -U syk -d test -h 127.0.0.1 -p 5432
postgresql-server-dev-9.3、MySQL 開發包):
git clone https://github.com/EnterpriseDB/mysql_fdw
cd mysql_fdw
sudo PATH=/usr/local/pgsql/bin/:/usr/local/mysql/bin:$PATH make USE_PGXS=1 install
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 syk SERVER mysql_server
OPTIONS (username 'sky', password 'sky');
CREATE FOREIGN TABLE syk_test2 (
goods_id INT,
goods_type VARCHAR(10),
goods_id2 BIGINT
) SERVER mysql_server OPTIONS (dbname 'syk', table_name 'syk_test2');
SELECT * FROM syk_test2; 即可看到 MySQL 數據;DELETE FROM syk_test2 WHERE goods_id=0; 可直接寫入。sudo python setup.py installCREATE EXTENSION multicorn;
CREATE SERVER multicorn_hive FOREIGN DATA WRAPPER multicorn
OPTIONS (WRAPPER 'hivefdw.HiveForeignDataWrapper');
CREATE USER MAPPING FOR PUBLIC SERVER multicorn_hive;
TABLE 直連或 QUERY 自定義 SQL):
CREATE FOREIGN TABLE hive (
cat_id INT, cat_name VARCHAR, cat_name_en VARCHAR,
type INT, p_id INT, deep INT
) SERVER multicorn_hive OPTIONS (
HOST 'c3-hadoop-hive01.bj', PORT '18XXX', TABLE 'b2c_d.xm_config_cat'
);
\! kinit -kt h_b2c_dc_r.keytab h_b2c_dc_r@XXX.HADOOPSELECT * FROM hive;first column of remote table must be unique。GRANT ALTER ON syk.* TO sky@'%'; 才能加唯一鍵。kinit,否則報認證失敗。