之前的业务需求是实现数据的增量同步,具体描述为:新增数据插入,变化数据更新(增改),我使用 表输入+插入更新控件 即可实现。

现在业务提出新的需求:除前面描述外,还要实现源表数据删除时,目标表数据同样删除。
虽然我极其不推荐这样做,原因有三:
            (1)数据库不应该真正存在delete操作,如果确实要删除一条数据的话,理论上应该在数据库中设置标志位,执行update,不向前端业务显示,但数据仍存在数据库中,便于追溯和回退;
            (2)ETL实现删除数据的操作,一旦出现问题,很难查找和解释原因,容易出现互相扯皮和推诿现象;
            (3)我需要重新开发ETL。虽然个人难以接受,奈何业务需求是天,我也得硬着头皮去完成,之后可能发生的事情,只能“走一步看一步”,听天由命了。记录关键过程如下:

1.   转换的核心对象共4个,包括2个输入、1个合并记录和1个数据同步。文本文件输出是为了看合并记录结果的。源数据和目标数据必须为同样结构的表。

下图实现功能:将目标数据表的数据同步到源数据表。两者数据最终完全一样。

实现原理:比较源表和目标表的行数据,然后生成合并表,数据同步控件根据合并表的结果,将最新的数据同步到源数据表。和源数据表相比,目标数据表新增的数据新增到源数据表,目标数据表删除的在源数表删除,目标数据表修改的在源数据表修改,目标数据表没有变化的数据在源数据表不进行改变。最终结果是

【表输入在输入中找:合并记录在链接中;数据同步在输出中】分别设置源数据和目标数据,其中记录数量限制为0就是全部同步。
       

2.合并记录设置。新数据源的数据同步到旧数据源。旧数据源是要被数据同步控件覆盖的数据,也就是数据同步控件的目标表;根据新数据源数据和旧数据源的比较是否有增删改查来给标志位赋值。标志字段随便起名即可(要符合命名规范)。“”匹配的关键字”最好是主键(唯一值勉强也行),数据字段是要同步的列(注意,一定要包括关键字段,否则目标数据该列就是空值,千万注意!!)。如下图:

3.合并结果如下。合并源数据表和目标数据表的所有行数据,然后每行加入标志字段。表示字段的值deleted、changed、identical、new。这些值和下面的数据同步控件高级选项填写的值必须一样。

4.合并完成后,标志字段的值有4种,分别是:

Identical” : 关键字段在新旧数据源中都存在,且域值相同

“changed” : 关键字段在新旧数据源中都存在,但域值不同

new” :  旧数据源中没有找到该关键字段

deleted”:  新数据源中没有找到关键字段

5.数据同步的配置需要注意以下几点:

(1)  不论是查询的关键字,还是更新字段,都不要写标志字段;其他字段根据业务需求,进行设置;

(2)  高级标签中的规则要定义好,否则会报“It was not possible to find operation field [null] in the input stream!”错误。

(3)  此处设置的数据表必须为源数据表。数据同步控件根据合并记录控件输出的合并表的标志位的值,来决定哪些行的数据需要输出到源数据表。new的数据新增到源数据表,changed的数据更新,deleted的数据删除,indentical的数据不进行改变。

下图中的值必须是new、changed、deleted,和合并记录控件输出的合并结果中的标志位的值一样。数据同步控件根据此处设置的值来和合并结果标志位的值进行比较,来判断每行数据的增删改查。

5.根据需要是定时操作,还是手工操作,如果定时的话,重新建个作业,设定开始相关的配置即可。

另外需要强调一下,如果源数据和目标数据字段不一样的话,来源数据可以用as来改变列名,并一定注意名称和列顺序一致。

6.保存作业到本地。可以将保存的作业上传到linux系统、windows系统上定时运行。

参考:Kettle之数据同步

Kettle之数据同步相关推荐

  1. kettle spoon 数据同步

    kettle spoon 数据同步 博客分类:mysql kettle spoon 数据同步  写这篇随笔只为记录,免得忘记了. 第一步:建立一个转换,文件->新建->转换 第二步:打开转 ...

  2. Kettle 实现数据同步

    因为服务器限制,现需要同步两个不同数据库的业务表数据. 这里选择使用Kettle 实现.5分钟,同步一次. 下面是实现的操作总结. 1.下载 安装kettle https://sourceforge. ...

  3. 利用kettle进行数据同步

    最近工作上遇到数据同步场景就简单记录下 这里使用kettle9.0版本为例. 概述如下图 表输入步骤就简单说明下: 1.没有数据源就创建数据源在选择数据源 2.选择模式,当然你若是mysql就这一步当 ...

  4. 使用Kettle进行数据同步(增量)

    文章目录 kettle介绍 kettle安装 kettle使用 使用kettle同步关系型数据库数据(MySQL示例) 1. 创建一个转换 2. 选择表输入 3. 格式转换 4. 执行脚本 5. 创建 ...

  5. kettle 批量多表同步_财务基础数据同步的方式

    全文共计1800字,预计阅读时间: 5 分钟 良人一句三冬暖,伤人一语六月寒! 前言 介绍财务进销存系统框架时,一直在说财务数据需要进行分层,从基础数据到计算层,再到财务数据层,最后是展现层,每层间都 ...

  6. kettle spoon判断增量更新_使用Kettle实现数据实时增量同步--时间戳增量回滚同步...

    使用Kettle实现数据实时增量同步 0. 前言 本文介绍了使用Kettle对一张业务表数据(500万条数据以上)进行实时(10秒)同步,采用了时间戳增量回滚同步的方法.关于ETL和Kettle的入门 ...

  7. kettle实现数据增量同步方案

    1. 背景 我司目前数据库之间的数据同步都是oracle goldengate(ogg)方案,该方案的特点: 优点: 基于数据库的变更日志同步(oracle redo\mysql binlog),速度 ...

  8. kettle 插入更新 数据增量_使用Kettle实现数据实时增量同步

    2018-09-28: 示例job已上传至github,地址见文末 0. 前言 本文介绍了使用Kettle对一张业务表数据(500万条数据以上)进行实时(10秒)同步,采用了时间戳增量回滚同步的方法. ...

  9. Kettle-开源的ETL工具集-实现SqlServer到Mysql表的数据同步并部署在Windows服务器上

    场景 kettle 中文名称叫水壶,该项目的主程序员MATT希望把各种数据放到一个壶里,然后 以一种指定的格式流出.是一款由纯Java编写的ETL工具,绿色无需安装,数据抽取高效稳定(数据迁移工具). ...

  10. ETL的数据同步工具调研(持续更新中)

    扯白了,数据同步工具就是"导数据 "的 名称 社区响应 国内使用情况(以前程无忧为参考) SQOOP 更新缓慢,对于hbase2.x以上版本使用时需要老版本的jar包 9页 Dat ...

最新文章

  1. 关于Android构建
  2. c++ public 函数名相同_C++虚函数、重载、覆盖
  3. 女的喜欢OBC男的喜欢OGC的含义(转)
  4. ~~并查集模板(数据结构)(附题目AcWing 836. 合并集合)
  5. 峰Redis学习(6)Redis 数据结构(sorted-set的操作)
  6. 如何远程登录连接Linux云服务器(电脑端/移动端)?
  7. Raki的读paper小记:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
  8. Java二进制的符号位在哪一位_Java位运算符及二进制常识
  9. python函数使用大全_SPSS常见函数及使用方法
  10. 网站整站下载工具—HTTrack Website Copier
  11. 建立自己的JS库【初始篇】
  12. java 一年有多少周_Java8根据一年中的第几周获得Monday
  13. day10:声明式事务控制
  14. SEC再收中国互金企业招股书 融360成立简普科技拟融资2亿美元
  15. 微信java tools_微信工具weixin-java-tools的使用总结
  16. 公众号文章中怎样图文排版可以实现逐行显示?
  17. 毕业一年,我是如何实现每月两千副业之路
  18. (三十)arcpy开发pycharm导入arcpy
  19. 彻底关闭win11自动更新
  20. linux 那些事儿系列

热门文章

  1. 关于宇宙宿命论的一些思考
  2. 七缸发动机预热,docker swarm + .net core 高速飙车成功
  3. 网关与路由器关系介绍
  4. 对时间序列做分段相关性分析(matlab代码)
  5. 免费的ftp服务器 linux,免费ftp服务器,3款免费ftp服务器推荐
  6. 高拍仪拍照SDK开发(良田影像S300L|S500L)
  7. 内网穿透软件对比——cpolar : 花生壳(上)
  8. 网站头像html,分享一个非常强大的头像在线生成网站
  9. Bugku之网站被黑
  10. java 值传递 引用传递的理解 言简意赅 一字千金