greenplum 4.1 版本及老版本如何使用读写外部表+管道实现gptransfer同步功能

参考gptrasfer的介绍
1.在源数据库中创建一个可写外部表
2.在目标数据库中创建一个可读外部表
3.在源集群中的Segment主机上创建命名管道和gpfdist进程
4.在源数据库中执行一个SELECT INTO语句以插入源数据到可写外部表中
5.在目标数据库中执行一个SELECT INTO语句把数据从可读外部表插入到目标表中
6.可以选择通过在源和目标中比较行计数或者行的MD5哈希来验证数据
7.清除外部表、命名管道和gpfdist进程

刚好有一个4.1版本的库需要做同步,datax对于PB级的数据量同步有点力不从心,测试了一下按照gptrasfer的流程写一个脚本实现
1.gpfdist部署 (可以放在目标库上,设置同一个目录,读写外部表用2个不同端口,不然直接卡死)

nohup gpfdist -d /tmp -p 8000 -m 1048579 &
nohup gpfdist -d /tmp -p 8001 -m 1048579 &

2.源库 ip1

CREATE WRITABLE  EXTERNAL TABLE ex_test  (LIKE test)      
  LOCATION ('gpfdist://filehost:8000/test.out')
  FORMAT 'TEXT' (NULL AS '') DISTRIBUTED RANDOMLY;

3.目标库 ip2
--按源库的test结构建表

CREATE  TABLE test(...);

CREATE   EXTERNAL TABLE ex_test  (LIKE test) 
  LOCATION ('gpfdist://filehost:8001/test.out')
  FORMAT 'TEXT' (NULL AS '') ;

4.gpfdist服务端操作

vi /tmp/gptransfer.sh
#!/bin/bash
mknod /tmp/test.out p
psql -h ip1 -d postgres -U xxx -c 'insert into ext_test select * from test;'&
psql -h ip2 -d postgres -U xxx -c 'insert into test select * from ext_test;'
rm -rf /tmp/test.out

chmod +x gptrasfer.sh
./gptrasfer.sh

--参考文档
https://wenku.baidu.com/view/a9ef17d1ce2f0066f53322f3.html 使用GPLOAD实现无落地文件的高速加载oracle数据

上一篇:Java编程——Tomcat基本概念及常用调优方式


下一篇:MySQL内核月报 2014.12-MySQL· 性能优化·Bulk Load for CREATE INDEX