Kettle有几年没用过了,昨天刚好开发找我,说同步ORACLE几张表的数据到MySQL,ORACLE的数据有可能更新,可以通过时间字段,但是全量同步,当天上生产由于数据量大不一定来得及,需要提前想个方案,问我做还是他来做,说他没有找到什么好办法,那就我来吧。就在这一瞬间,我脑子里浮现出来几个方案:

1. 用python写个程序读取ORACLE,通过ID判断,来增量插入到MySQL

2. 用JAVA写个程序读取ORACLE,通过ID判断,来增量插入到MySQL

3. 通过SPARK批量读取ORACLE,通过ID判断,来增量插入到MySQL

4. 通过ORACLE spool到文件,然后在MySQL load inpath

5. 通过kettle增量插入并更新

以上1-4都是增量插入,那么更新的数据怎么来处理,我想了一个办法,通过盗用ogg抓取ORACLE日志存放到KAFKA,写一个spark streaming实时更新这些数据到MySQL。

第一个想法通常会第一个实现,因此我打开Pycharm,安装oracle, MySQL的module, 一直提示gcc++错误,装不了,于是百度,浪费了我半个小时也没搞定,于是放弃了,反正我方案多的是。思来想去,还是用kettle吧,ETL工具不用太麻烦。

我习惯性的把问题肢解成2个步骤:

1. 增量插入

2. 处理更新的数据

增量插入的思路很简单,假设同步test到test1

转换1(获取最大的ID):select max(id) as endid from  test --->设置变量

转换2(获取最小的ID): select max(id) as startid from test1 ---->设置变量

转换3:  获取变量--->table input ---> table output

input的SQL:select * from test where id > ${startid} and id <= ${endid} ;

就是这么简单3步解决。整个JOB的连接顺序如下:

好了,以上搞定了增量同步插入,现在来处理更新的数据。

更新的数据处理实际是比较麻烦的,通过kettle来做的话,需要这么来处理。 从test表查询数据,从test1查询数据,然后进行比较,数据量大的话,这个比较实际上会很慢的。

看上面的合并记录的定义,比较2个数据流,然后我们可以通过时间戳的对比,如果发现不同,表示这个数据需要更新。通常不用考虑delete的问题,因为现在大部分不会直接删除数据,基本是通过设置行的状态,来表示数据可用还是不可用,实际也就只需要考虑update.

既然上面的效率不好,那么考虑使用我们5种方案来处理update的数据。

逻辑简单:ogg监控ORACLE日志,抓取相关表的日志到kafka,然后通过spark streaming或者storm处理数据,发现变更的字段直接拼接SQL,在mysql里面更新即可,做到实时。

Kettle增量同步数据相关推荐

  1. Mysql5.7使用DTS增量同步数据到MaxCompute

    背景:一些客户反馈,增量同步数据到MaxCompute按照全天的数据做增量数据同步数据量太大,且不使用按天的增量同步数据,进行在MaxCompute上进行数据处理得出增量数据对于delete的相关数据 ...

  2. MySQL从零到一解读增量同步数据到elasticsearch canal adapter方式(binlog)实现

    本文是作者在单机上面从零到一实现增量同步MySQL数据到elasticsearch canal adapter方式(binlog)实现. 实现步骤 (1)安装MySQL (2)开启MySQL binl ...

  3. 使用canal实现MySQL 8 增量同步数据到 ElasticSearch 7.15.2中 linux

    文章目录 一.清空控制台 1. 清空控制台 2. 修改数据 3. 监控数据 4. 数据变化 5. 索引查询 6. 预期性能评估 7. 增量同步分析 二.验证方案 2.1. 把shop索引删除 2.2. ...

  4. Clickhouse单机部署以及从mysql增量同步数据

    背景: 随着数据量的上升,OLAP一直是被讨论的话题,虽然druid,kylin能够解决OLAP问题,但是druid,kylin也是需要和hadoop全家桶一起用的,我也搞不定,那只能找我能搞定的技术 ...

  5. clickhouse + ProxySQL 单机部署及增量同步数据

    背景: 随着数据量的上升,OLAP一直是被讨论的话题,虽然druid,kylin能够解决OLAP问题,但是druid,kylin也是需要和hadoop全家桶一起用的,异常的笨重.故引进clickhou ...

  6. clickhouse 同步mysql_ClickHouse单机部署以及从MySQL增量同步数据

    背景: 随着数据量的上升,OLAP一直是被讨论的话题,虽然druid,kylin能够解决OLAP问题,但是druid,kylin也是需要和hadoop全家桶一起用的,异常的笨重,再说我也搞不定,那只能 ...

  7. 第02期:ClickHouse 单机部署以及从 MySQL 增量同步数据

    本期作者:邓亚运 37 互娱高级 DBA,负责公司 MySQL,Redis,Hadoop,Clickhouse 集群的管理和维护. 背景 随着数据量的上升,OLAP 一直是被讨论的话题,虽然 drui ...

  8. 大数据Kettle实时同步数据的六种方案

    数据同步:当数据源发生改变时,其他相关数据也跟着发展变化.根据需求不同可采取以下方案. 1.触发器 在数据库建立增删改的触发器.触发器将变更放到一张临时表里.oracle同步cdc 优点:实时同步 缺 ...

  9. 两个数据库字符集不一样,如何快速增量同步数据.

    环境: DB-A 字符集:US7ASCII DB-B 字符集:ZHS16GBK 需求: 从DB-A中将一个表的中文数据通过JAVA定时任务同步到DB-B. DB-A库中表的信息如下: CREATE T ...

最新文章

  1. Java获取照片的Exif信息,并解析GPS
  2. 对讲机的那点事:带你玩转LD800数字车载台读、写频操作:一
  3. python爬虫完整实例-Python爬虫 实例
  4. 清理和删除svn信息
  5. 提交自己开发的MR作业到YARN上运行的步骤
  6. @SuppressWarnings(rawtypes) 是什么含义
  7. 苹果留给 iOS 开发者的时间不多了:30 天内必须更新旧版本
  8. 程序员只能吃“青春饭”?C 认证带你破局!
  9. hibernate4 could not initialize proxy - no Session
  10. DataGrid分页(1)
  11. chartControl控件常用属性总结
  12. Android Paint 详细讲解
  13. lol全队消息怎么发_英雄联盟如何发全部消息,LOL怎样发送消息给全部
  14. QT 信号toggled triggered区别
  15. 杂谈随想第002篇:博客访问量破万的想法
  16. 数据流分析之Reaching Definition Analysis
  17. 谷歌浏览器在线观看视频有声音但画面黑屏问题解决
  18. 浅入浅出Caffeine cache
  19. 到墨西哥的液体货物国际快递怎么邮寄
  20. 安全应用超市:购君所需,付君所用

热门文章

  1. 今年的高考考题,不仅有人工智能,还有互联网+
  2. 大数据演进简史:从数仓到数据中台,谈技术选型最优解
  3. ESI最新排名:中国科学院大学超清北,居中国内地第一
  4. c51按键控制灯亮汇编语言,51单片机汇编语言编程进行按键控制
  5. css display:flex 弹性布局 子标签设置宽度无效的问题
  6. 编程day01-装13问题(十进制->二进制)
  7. 哪类公司能开增值税票,哪类公司只能开普票?
  8. python 网盘搭建_给自己搭建一个网盘
  9. Ubuntu系统下BTC服务安装
  10. WLAN AC+AP部署(AC旁挂在核心)