一般在项目里,我们难免会遇到不同数据库间的数据迁移,或者是不同数据库之间的数据同步对接。而kettle软件作为第三方软件可以很好的实现对接。
由于本人也是刚刚使用这个软件,所以在这里分享几个简单的数据对接案例。
一、步骤准备
- 安装mysql数据库
- 安装Oracle数据库
- 下载pdi-ce-5.4.0.1-130,并且打开data-integration底下的spoon即可打开软件
二、简单入门(例子1:简单实现同一个数据库的不同表数据同步)
- 新建转换
- 修改转换名称及备注
- 添加数据库
双击DB连接,填写配置信息,然后点击测试,如果显示连接成功即可。如果需要共享数据库,可以点击连接的数据库,右键,共享即可(共享需要重启kettle才可以实现)。
- 添加步骤
该例子主要实现oracle数据库的一个表数据转移到另一个表,如果两个表字段不同,可以通过映射字段转移!!
主要的步骤包括:1.读取表数据-。2.插入表数据。首先找到核心对象–》输入–》表输入,然后鼠标左键将表输入拖入右边白色区域,如下图
同理,将输出–》插入/更新拖到右边白色步骤,并且按住shift,左键从“表输出”拖动到“插入/更新”即可建立关系,如果想要取消关联运行,再点击一次使黑色箭头线变成灰色即可,或者也可以直接右键-删除。如下图所示: - 编写步骤逻辑
双击“表输入”,填入相关逻辑,也可以自定义步骤名称。填写完可以测试下是否能够读取到想要的数据、
然后双击“插入/更新”,填入相关逻辑。
需要注意的是,这个地方的“用来查询的关键字”,可以理解为更新条件。以我上图的为例,当oracle_to_mysql表的数据的id在kettle_test存在时,则这条记录就会被更新,不存在则进行新增。 - 执行
点击上方的三角符号即可进行转换。
三、实现定时功能(在上一个例子的基础上深入)
-
实现删除同步
在上一个例子中,我们实现了数据同步。但是经过测试,我发现这个同步只能实现增加数据的同步,如果输入表的数据被删除,更新表却不会实现同步删除。所以,这里需要加一个“执行sql脚本”实现删除的同步,如下图 -
使用定时器进行同步
当然,在实际项目中,如果我们接数据不可能一直手动操作,肯定需要设立定时器定时接受数据,所以我们可以设立一个定时器。
首先新建一个作业
然后在通用里将“start”和“转换”拖到右边空白处并且连接起来
给“start”定时,为了方便查看,我这里定时3秒为一次执行动作
然后再赋予“转换”事件,这个事件1就是我前面同步事件
然后点击上方的三角执行即可!!! -
利用.bat文件在程序外启动定时器
由于我们在数据同步接受的时候,不可能一直开着软件接收数据,所以可以考虑弄一个批处理文件进行定时器启动。而kettle提供了kitchen.bat启动定时器文件。所以,我们只要新建一个.bat文件,然后切换目录到kitchen.bat文件底下,调用kitchen.bat即可,如下所示:
d:
cd D:\kettle\pdi-ce-5.4.0.1-130\data-integration
kitchen /file:D:\kettle\workspace\job1.kjb
由于这将会启动一个doc串口,如果想要隐藏窗口可以在.bat文件头部加入以下代码即可:
@echo off
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("%~nx0 h",0)(window.close)&&exit
:begin
::
如下图所示
四、实现oracle同步到mysql表(在上一个例子的基础上深入)
- 添加mysql数据库
跟oracle一样,双击DB连接,然后配置相关信息,如下图: - 创建新的“插入/更新”
这里如果需要将oracle表数据同步到mysql表数据,只需将oracle的“插入/更新”替换为mysql的即可。
然后点上方三角运行即可!!!
五、 关于表输出的使用
通过使用,我发现好像有kettle有三种表述出方式,分别是:
插入/更新、表述出、sql脚本关系。
当然,他们之间还是有一定区别的,就目前使用经验,本人稍微总结了一点使用区别。
-
插入/更新(这里就不截图了,前面有介绍):
1.1. 不执行任何更新:如果被选择,则不执行任何更新,只允许插入。
1.2. 用来查询的关键字:可以通过定义关键字来决定插入或者更新
1.3. 更新:可以指定那些字段不进行更新。 -
表输出:没有更新操作,如下图
-
sql脚本
就是自定义sql进行实现sql操作,比其他两个灵活。如下图:
完整例子看分享2!!!!