使用kettle进行全量更新

工具

  • ETL工具:KETTLE 7.1
  • 数据库:mysql 5.7.16

概念

  • 全量更新:通过标识比较不相同数据,对目标表进行增删实现同步两表同步。

例子:

  • 数据库建立表如下
    • 源表user_b
      user_b
    • 目标表user_a
      user_a
      实现目标,当user_b 改变的时候,同步到user_a
      这里使用kettle工具实现,kettle工具的了解请看入门教程
      打开spoon.bat (spoon和chef已经合并) ,新建转换如下
      spoon

这里步骤使用了

1.表输入

USER_A、USER_B(界面如下图,这里只展示USER_B),数据连接不介绍
	![表输入](https://img-blog.csdnimg.cn/20191211102804787.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3VmaWRhX3d4eA==,size_16,color_FFFFFF,t_70)

2.合并记录

合并记录
合并记录 需要设置两个相比较的数据源(USER_A、USER_B)
标志字段 (用于标志两表相比较的结果) :flag(

  • identical:就数据和新数据一样。
  • changed:数据发生了变化。
  • new:新数据中有而就数据中没有的记录。
  • deleted:旧数据中有而新数据中没有的记录。

关键字段: 一般是用主键比较,决定flag是new还是 deleted;
数据字段: 决定flag是 changed 还是 identical;

3.switch/case

switch/case
显而易见,用于判断字段决定走哪一条线,这个步骤在kettle中非常关键。

4.插入/更新

如果 flag是new / changed
插入/更新

5.删除步骤

如果flag是delete
删除步骤

6.空操作

显而易见,当flag=identical,那么就应该什么都不做,没什么好说明的。

7.我们来看一下效果

同步例子

  • 同步之前
    A表:
    在这里插入图片描述
    B表:
    在这里插入图片描述

  • 插入同步
    在B表增加一条记录
    在这里插入图片描述
    执行转换
    在这里插入图片描述
    我们来看看A表查询结果
    在这里插入图片描述
    已经增加记录

  • 修改同步
    我们再试试修改B表
    在这里插入图片描述
    执行转换之后看看A表查询结果
    在这里插入图片描述

  • 删除同步
    接下来我们把B表中的记录删除
    在这里插入图片描述
    执行转换,查询表A记录
    在这里插入图片描述
    表A查询记录(删除成功)
    在这里插入图片描述

至此,使用kettle的spoon进行转换设计,并且成功实现全量更新。


版权声明:本文为ufida_wxx原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。