利用kettle实现数据库之间的数据同步
如果你需要做不同数据库之间的数据迁移或者抽取部分数据到另一个数据库,并实现定时数据同步(非实时),那么kettle是一个很好的选择。
以mysql数据库—> oracle数据库的定时同步作为案例:
清楚数据抽取需求
抽取数据的mysql数据库表和oracle的表一致,单表对单表抽取
根据oracle需求,在mysql写sql,再抽取相应数据到Oracle。
是否定时。
全量抽取 or 增量抽取。
案例需求:根据需求在mysql写sql,增量抽取其数据到Oracle,实现按天定时抽取。
备注:(按月增量),查询当前月份为全量抽取,非当前月份数据增量抽取。例如:今天是10月15日,到月底之前每天全量抽取当月数据,每天更新10月份的数据;11月1号开始,10月份数据不动,只是每天全量抽取更新11月份的数据。
所以当月是全量抽取,但增量是基于前一个月的基础上。
首先在mysql数据库 根据需求编写sql。
新建转换
主对象树-转换-右键新建
![](https://img-blog.csdnimg.cn/b96c0c3cb32a4a2ebc2828d81389f462.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAQ2FuZHkuZ09vZG1Pcm5pbmc=,size_15,color_FFFFFF,t_70,g_se,x_16#pic_center)
主对象树-DB连接-右键新建
![](https://img-blog.csdnimg.cn/30ba2b272f6b48c687132353e30edc5e.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAQ2FuZHkuZ09vZG1Pcm5pbmc=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
连接oracle数据库:
![](https://img-blog.csdnimg.cn/1b38d4382af042c7bb7e443ffb5d8e3a.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAQ2FuZHkuZ09vZG1Pcm5pbmc=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
连接mysql数据库:
![](https://img-blog.csdnimg.cn/fc070d1c9f0b4ae5ad90f943af75deef.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAQ2FuZHkuZ09vZG1Pcm5pbmc=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
核心对象—输入—表输入-拖入界面即可
![](https://img-blog.csdnimg.cn/f170e97480bd4341b1759c1e1ec179ee.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAQ2FuZHkuZ09vZG1Pcm5pbmc=,size_12,color_FFFFFF,t_70,g_se,x_16#pic_center)
双击打开表输入
![](https://img-blog.csdnimg.cn/1fa0f28df6f144c1ada3df48204fcd1d.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAQ2FuZHkuZ09vZG1Pcm5pbmc=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
核心对象—输出—插入/更新—拖入界面即可
![](https://img-blog.csdnimg.cn/dadca52d0d5a45abb97dd46b28b1dd32.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAQ2FuZHkuZ09vZG1Pcm5pbmc=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
双击打开表插入/更新
![](https://img-blog.csdnimg.cn/7b84d49b4c0f4b91b8254662c0f1fdda.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAQ2FuZHkuZ09vZG1Pcm5pbmc=,size_13,color_FFFFFF,t_70,g_se,x_16#pic_center)
核心对象—>转换—>字段选择—拖入界面即可
按住shift连接三者
![](https://img-blog.csdnimg.cn/18d2edf92e97405da0d9f8e3d11aeaeb.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAQ2FuZHkuZ09vZG1Pcm5pbmc=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
双击打开字段选择(点击元数据—获取改变的字段即可)
![](https://img-blog.csdnimg.cn/2999787e001d460bbb6c1c4aae4a6a98.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAQ2FuZHkuZ09vZG1Pcm5pbmc=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
注意Encoding设置为UTF-8,否则抽取的数据会乱码
![](https://img-blog.csdnimg.cn/d26e80a2a37b47c8a43b15f633446fd7.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAQ2FuZHkuZ09vZG1Pcm5pbmc=,size_13,color_FFFFFF,t_70,g_se,x_16#pic_center)
核心对象—>脚本—>执行sql脚本—拖入界面即可
![](https://img-blog.csdnimg.cn/a8508fb7e66042b39da7411180193f9b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAQ2FuZHkuZ09vZG1Pcm5pbmc=,size_12,color_FFFFFF,t_70,g_se,x_16#pic_center)
双击打开执行sql脚本
由于我们需要按月做增量抽取,本月数据做全量抽取。所以在抽本月数据之前要先删除oracle库目标表中之前抽取的本月数据。
点击运行此转换—即可完成一次数据抽取
![](https://img-blog.csdnimg.cn/53e14e55b2564630b26d1cba2f129bc7.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAQ2FuZHkuZ09vZG1Pcm5pbmc=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)