oracle 去重_如何用gpss实现Oracle到Greenplum的增量同步

本文介绍了如何使用Oracle Golden Gate将增量数据转化为JSON并发送到Kafka,然后通过GPSS解析JSON消息,将更新应用到Greenplum目标表,实现了Oracle到Greenplum的增量同步。内容包括测试环境配置、数据去重与排序、Kafka消息格式以及gpss的Kafka JOB配置。
摘要由CSDN通过智能技术生成

bc257f317307aab21ec3c0b04e201f0b.gif

之前我们在《如何用gpss实现MySQL到Greenplum的增量同步》中详细介绍了MySQL到Greenplum增量同步的实现步骤。今天将给大家讲一讲Oracle到Greenplum又是如何实现的。

Oracle数据库虽然在OLTP领域仍有着毋庸置疑的优势地位,但在OLAP领域与Greenplum则是差距显著。如今已经有越来越多的分析型业务从Oracle迁移到Greenplum,在《如何从Oracle迁移到Greenplum》系列文章中,详细介绍了业务的迁移的最佳实践;而数据迁移中最核心的就是如何实现数据的实时增量同步。 对增量同步而言,gpss作为一个流计算框架,与源端是解耦的,因此只要Kafka topic中的消息,包含足够的信息,gpss都可以提取变化的数据并重放到gp中。 之前介绍了如何利用gpss同步来自Maxwell和Mysql的增量数据,这里再以Oracle Golden Gate为例,介绍如何实时同步来自Oracle的增量数据。

1

测试环境

  • Oracle
  • Oracle Golden Gate
  • Kafka 2.2.2
  • Greenplum 6.4.0
  • GPSS 1.3.6
我们要完成的工作是:
  • 通过GoldenGate将Oracle中的增量数据以json格式发送到Kafka (略)

  • 利用gpss解析kafka中的json消息

  • 将变化的数据更新到Greenplum的目标表中

2

测试数据简介

测试使用的表在Oracle中定义如下:

CREATE TABLE SIEBEL_TEST.TEST_POC(   ID numeric,   NAME varchar2 (50),   BIRTHDAY date)
其中 ID 列为键,用来唯一标识一条记录, NAME 和 BIRTHDAY 为更新字段 在源端分
1、脚本运行环境python3.6 2、脚本忽略LOB字段数据 3、脚本生成以^为分割符的csv格式文件 4、脚本避免转义字符将‘\’替换为‘/’,数据中存在分割符:^转换为# 5、特殊字符处理:删除:'\u0000','"',oracle数据回车符:'\r','\n' 6、支持按分区导入 7、支持内存处理数据导入greenplum,导入失败生成csv格式文件,方便排错 8、支持生成csv格式文件导入greenplum。 9、传递不同配置文件,多次执行达到并行处理(注意内存溢出) 例: 执行脚本 生成日志目录 配置文件 python3 Main_Mem.py ProcessLog1 config1.ini & python3 Main_Mem.py ProcessLog2 config2.ini & python3 Main_Mem.py ProcessLog3 config3.ini & python3 Main_Mem.py ProcessLog4 config4.ini & 10、采用python 中的copy_from方法实现导入greenplum 11、各目录用途: conf :存放配置文件 etl_dat: 存放导出数据 log :存放输出日志 py_tool 存放编写工具脚本: DBconn: 数据库连接池配置及查询返回方法 DumpCsv:导出csv文件方法 Log:日志输出方法 DataBase:判断表是否存在、表或分区表是否有数据、是否为分区表、数据导出、表分区遍历、指定分区表导出等方法 py_main:主程序目录: Main_Mem.py:主程序目录: 运行:python3 Main_Mem.py ProcessLog1 config.ini 12、主程序需要修改目录参数: if __name__ == '__main__': #引用编写的包 sys.path.append('/home/oracle/PyETL2.0/py_tool') import Log,DataBase,DumpCsv #输出日志路径: path = '/home/oracle/PyETL2.0/log/'+sys.argv[1] isExists = os.path.exists(path) if not isExists: os.makedirs(path) #shutil.move(path,path+) logger = Log.log(path) #读取配置文件 config = Confile('/home/oracle/PyETL2.0/conf/', sys.argv[2]) 13、后期还会更新,欢迎提供宝贵意见。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值