工具

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

概念

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

例子:

  • 数据库建立表如下
  • 源表user_b
  • 目标表user_a

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

这里步骤使用了

1.表输入

USER_A、USER_B(界面如下图,这里只展示USER_B),数据连接不介绍
	![表输入]()

2.合并记录

kettle MongoDB 怎么更新 kettle全量更新_全量更新


合并记录 需要设置两个相比较的数据源(USER_A、USER_B)

标志字段 (用于标志两表相比较的结果) :flag(

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

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

3.switch/case

kettle MongoDB 怎么更新 kettle全量更新_ETL_02


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

4.插入/更新

如果 flag是new / changed

kettle MongoDB 怎么更新 kettle全量更新_转换_03

5.删除步骤

如果flag是delete

kettle MongoDB 怎么更新 kettle全量更新_转换_04

6.空操作

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

7.我们来看一下效果

同步例子
  • 同步之前
    A表:
  • kettle MongoDB 怎么更新 kettle全量更新_ETL_05

  • B表:
  • kettle MongoDB 怎么更新 kettle全量更新_KETTLE_06

  • 插入同步
    在B表增加一条记录
  • kettle MongoDB 怎么更新 kettle全量更新_全量更新_07

  • 执行转换
  • kettle MongoDB 怎么更新 kettle全量更新_KETTLE_08

  • 我们来看看A表查询结果
  • kettle MongoDB 怎么更新 kettle全量更新_转换_09

  • 已经增加记录
  • 修改同步
    我们再试试修改B表
  • kettle MongoDB 怎么更新 kettle全量更新_全量更新_10

  • 执行转换之后看看A表查询结果
  • kettle MongoDB 怎么更新 kettle全量更新_ETL_11

  • 删除同步
    接下来我们把B表中的记录删除
  • kettle MongoDB 怎么更新 kettle全量更新_全量更新_12

  • 执行转换,查询表A记录
  • kettle MongoDB 怎么更新 kettle全量更新_转换_13

  • 表A查询记录(删除成功)
  • kettle MongoDB 怎么更新 kettle全量更新_kettle MongoDB 怎么更新_14

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