栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

kettle数据转换工具使用案例

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

kettle数据转换工具使用案例

**

kettle数据转换工具使用案例

Kettle简介

Kettle是一款开源的etl工具,纯java编写,绿色无需安装,数据抽取高效稳定。
Kettle中有两种脚本文件,transformation和job,transformation完成针对数据的基础转换,job则完成整个工作流的控制。
kettle 部署运行
将pdi-7.1.0.0-12.zip文件夹拷贝到本地路径,例如D 盘根目录。
双击运行kettle文件夹下的spoon.bat文件,出现kettle欢迎界面,如果无法打开请检查本地是否已经安装jdk运行环境:
进入主界面:
新建转换和作业
点击页面左上角的创建一个新的转换,点击保存到本地路径,例如保存到D:/etltest下,保存文件名为EtltestTrans,kettle默认转换文件保存后后缀名为ktr。
点击页面左上角的创建一个新的作业,点击保存到本地路径,例如保存到D:/etltest下,保存文件名为EtltestJob,kettle默认job文件保存后后缀名为kjb。

创建数据库连接
在转换页面下,点击左边的主对象树,双击【DB连接】,进行数据库连接配置。
推荐使用Generic Database,因为mysql6以上版本如果使用mysql-connector-java-8.0.19.jar这个驱动,会提示找不到驱动包,用低版本的驱动转换的时候会报错。
点击测试,出现下面的弹框,提示没有对应的数据库驱动:

将提示的驱动包放入kettle文件夹下面的lib目录,重启kettle。点击测试,弹出如下提示表示连接成功。
案例一:两表数据同步
目标:将不同数据库里面的两张表进行数据同步,每分钟同步一次

点击文件-新建-转换,在左侧核心对象tab页下面将输入-表输入,输出-插入/更新,这两个对象拖到右侧编辑栏中,建立连接,如图:
【表输入】配置如下:
【插入/更新】配置如下:
Kettle执行这个步骤是需要两个数据流对比,其中一个是目标数据库,你在目标表 里面指定的,它放在用来查询的关键字左边的表字段里面的,另外一个数据流就是你在前一个步骤传进来的,它放在用来查询的关键字 的右边,Kettle首先用你传进来的key 在数据库中查询这些记录,如果没有找到,它就插入一条记录,所有的值都跟你原来的值相同,如果根据这个key找到了这条记录,kettle会比较这两条记录,根据你指定update field 来比较,如果数据完全一样,kettle就什么都不做,如果记录不完全一样,kettle就执行一个update 步骤。
备注:主键被修改得数据认为是新记录,删除的数据由在仓库中需要保留无需考虑

配置完成后点击运行这个转换按钮,查看日志如下,表示转换成功。
点击文件-新建-作业,在左侧核心对象tab页下面将通用-start,通用-转换,这两个对象拖到右侧编辑栏中,建立连接
【START】配置如下:

【转换】配置如下:
点击RUN,这样就完成了一个每分钟执行一次的数据同步任务。

案例二:Java代码组件应用目标:现有一张order订单表,将其根据订单号显示的年份分表存储到按年划分的三张订单表中

源数据库订单表DDL:

CREATE TABLE order (
id bigint(20) NOT NULL AUTO_INCREMENT,
order_num varchar(20) DEFAULT NULL,
content varchar(100) DEFAULT NULL,
create_time datetime DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;


目标数据库新增三张订单表DDL:

CREATE TABLE order_2020 (
id bigint(20) NOT NULL AUTO_INCREMENT,
order_num varchar(20) DEFAULT NULL,
content varchar(100) DEFAULT NULL,
create_time datetime DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

其他表以此类推

点击文件-新建-转换,在左侧核心对象tab页下面将输入-表输入,脚本-java代码,输出-表输出,这三个对象拖到右侧编辑栏中,建立连接,如图:

【表输入】配置如下:
【java代码】配置如下:

public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws  Exception  {      Object[] r = getRow();  //这里获取到上一个节点流转的行数据    if (r == null) {      setOutputDone();      return false;    }      r = createOutputRow(r, data.outputRowMeta.size()); //创建输出行数据    String orderNum = get(Fields.In, "ORDER_NUM").getString(r);    String content = get(Fields.In, "CONTENT").getString(r);    String createTime = get(Fields.In, "CREATE_TIME").getString(r);    String year = orderNum.substring(0,4);        get(Fields.Out,"table_name").setValue(r,"order_"+year); //将订单根据订单号前四位年份生成新的表名,放入输出行数据中    putRow(data.outputRowMeta, r);    return true;}

【表输出】配置如下:

配置完成后点击运行这个转换按钮,查看日志无报错,然后去新表里面查看数据,看到订单数据已经被拆分到了三张不同表中,则转换成功。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/971059.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号