开源ETL 工具 Kettle使用

在我们开发的过程中,经常碰到多个系统之间需要相互抽取数据的问题,以往我们可以通过写Webservices接口,或者FTP共享来完成,但是这样会存在工作量大,不便于维护,性能不高的问题。今天介绍一款常用的数据抽取工具—-Kettle。
Kettle是一款国外开源的ETL工具,纯Java编写,可以在Window、Linux、Unix上运行,数据抽取高效稳定。下面我们使用一个Demo程序介绍下其常用组件。

需求

有一个社交类的产品,进行了一次架构变更,数据库表结构模型发生变化了,从老系统升级到新系统时,要把老系统中数据迁移到新系统的数据库里。
下面我们拿群组表数据做个Demo演示数据迁移过程。
1. 现状:
老系统
群组表:group
群组成员表:user_group
新系统
群组表:group_分表,
群组成员表:group_members_分表
我的群组表:mygroups_分表
2. 步骤逻辑梳理
old:老系统
new:新系统
查询群组(old)->创建群组,群组成员,我的群组分表(new)->插入群组数据(new)->插入群组成员数据(new)

数据迁移

1.下载工具
http://community.pentaho.com/projects/data-integration/
下载完成后,解压,打开Spoon.bat启动

2.查询群组(old)- 表输入
当我们需要查询表数据时,需要用到表输入组件这里写图片描述
新建转换,选择 输入->表输入,双击 到 转换画板,打开输入以下信息:
步骤名称:步骤名称标识,不能重复
数据库连接: 要连接的数据库,如果没有,新建一个
SQL语句:输入查询SQL语句
下图是我写的
这里写图片描述
这样,我们查询群组表就写好了

3.创建群组分表(new) - SQL脚本
当我们要执行SQL时,可以使用SQL脚本组件这里写图片描述
选择 脚本-> 执行SQL脚本,双击 到 转换画板,打开输入要执行的SQL语句,如下图:
这里写图片描述
这里传入了game_id作为分表的参数,’tita_group_?’会被替换成’tita_group_gameid值’
记得选择 “执行每一行”

4.字段值转换 - 值映射组件 这里写图片描述
由于群组类型字段type发生了变化,原来是1,2,新系统是9,10,所以我要进行值得转换,使用值映射组件
这里写图片描述

5.插入群组数据(new) - 表输出
需要插入表数据时,使用 表输出组件
选择 输出->表输出,双击,打开,输入 ”数据库连接“,”目标表“,选择 ”指定数据库字段“,输入 ”数据库字段“ 映射,如下图:
这里写图片描述
”数据库字段“ 映射,表字段:插入表字段,流字段:”上一步“的输出字段,这样运行迁移时,会将数据插入到对应的表字段里

6.点击运行按钮这里写图片描述,运行转换,看到下图,表示转换完成
这里写图片描述

7.群组成员,我的群组数据迁移跟上面步骤类似,不再重复说明,最终完成整个转换如下图:
这里写图片描述

总之,学习的过程需要不断实践和反复摸索,这只是Kettle一小部分知识,大家保持一颗学习的热情,就不怕路远。

你可能感兴趣的:(ETL)