参考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数据