工具
- 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.合并记录
合并记录 需要设置两个相比较的数据源(USER_A、USER_B)
标志字段 (用于标志两表相比较的结果) :flag(
- identical:就数据和新数据一样。
- changed:数据发生了变化。
- new:新数据中有而就数据中没有的记录。
- deleted:旧数据中有而新数据中没有的记录。
)
关键字段: 一般是用主键比较,决定flag是new还是 deleted;
数据字段: 决定flag是 changed 还是 identical;
3.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进行转换设计,并且成功实现全量更新。