不积跬步,无以至千里;不积小流,无以成江海。

Dean's blog

  • Join Us on Facebook!
  • Follow Us on Twitter!
  • LinkedIn
  • Subcribe to Our RSS Feed

使用Kettle模拟MERGE INTO

对于习惯使用SQL进行工作的我,在使用Kettle进行数据同步时,首先想到的是数据库的MERGE INTO语句,这个语句也是专门用来进行数据合并的,它性能高效、简洁,可以在一个语句中完成新增、修改和删除操作。在熟悉Kettle的过程中,进行模拟该语句,也是不错的想法。

先看下最终的转换图:

相关说明:

1、由于要合并两个数据源,因此需要分别从“数据源”和“目标表”中加载数据,需要特别说明的是,由于后续“合并记录”节点会对数据进行比较,因此两个数据源需要采用一致的排序方式,否则合并后的数据会有问题。

2、字段选择:由于这里使用的是从MySQL 到 MSSQL,虽然同时bigint类型,但是映射的类型却不同(BigNumber(16)、Integer(15)),这里使用字段选择是为了将类型转换为统一的类型:

3、合并记录:设置的时候需要注意:

    旧数据源       是需要目标数据表

   新数据源        是合并的来源

   标志字段        会跟据数据的比较结果,生成不同的标记:

              deleted      在新数据源中找不到
              new          在新数据源中找不到
              changed      数据有变化
              identical    数据无变化

 匹配的关键字/字段:进行比较的字段

 

4、Switch / Case 会跟据不同的数据标记,将记录转发到对应的节点:

 Switch 字段:与“合并记录”中的标志字段一致

Case值:可根据对应的标记进行转发

这个示例中,changed的记录并没有使用“插入 / 更新”来做,而是使用先删除,后添加的方式,这样在数据量大的情况下,性能更优。

不允许评论
粤ICP备17049187号-1