博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【备忘】使用Kettle(PDI)进行ETL
阅读量:6925 次
发布时间:2019-06-27

本文共 2049 字,大约阅读时间需要 6 分钟。

hot3.png

Kettle是一款开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定。

现有一个需求。将数据库1中一个表(原表)中的数据抽取出来放到数据库2中另外一个表(目标表)中。并实时更新。

工具为kettle 5.0

工具为工具为kettle 5.0 (spoon 5.0)

Kettle中有两种脚本文件,transformation(转换)和job(作业),transformation完成针对数据的基础转换,job则完成整个工作流的控制。

直接拖拽你想要的组件到面板 然后用鼠标中间滚轮或者按住shift鼠标左键拖拽就可以连接他们了。

下面谈谈主要的思路:

1.先count目标表 得到目标表的记录条数。

表输入2 3

2.查询原表中目标表没有的部分 (这里用了自增id 即 id比目标表条数大的部分就是目标表不存在的)

表输入3 2

或者用偏移量如下

表输入5

因为有要替换的变量(就是那个问号)所以记得勾选这三个:

唔

  1. 然后写原表与目标表相对应的字段:

字段选择2

4.最后传给目标表: 表输出2

来张 转换1 的全家福 其中标输入3 2 是用的自增id判断是否有新加入的行 表输入5是用的偏移量 这两个选一个(个人倾向偏移量)。 转换1

===========================以上的为转换1==================================

以下为 作业:

作业

其中转换2为: count下原表得到原表行数,然后与目标表比较一下 讲结果传入一个变量 转换2

变量是这么设置的 设置变量

在job里这么接收比较的:

接收变量

最后 脚本可以用Java代码调用kettle 5.0的和3.0的不一样 如下

package test;import org.pentaho.di.core.KettleEnvironment;import org.pentaho.di.core.exception.KettleException;import org.pentaho.di.job.Job;import org.pentaho.di.job.JobMeta;import org.pentaho.di.trans.Trans;import org.pentaho.di.trans.TransMeta;public class Test { public void runJob(String jobname){ try { KettleEnvironment.init(); //jobname 是Job脚本的路径及名称 JobMeta jobMeta = new JobMeta(jobname, null); Job job = new Job(null, jobMeta); //向Job 脚本传递参数,脚本中获取参数值:${参数名} //job.setVariable(paraname, paravalue); job.start(); job.waitUntilFinished(); if (job.getErrors() > 0) { System.out.println("decompress fail!"); } } catch (KettleException e) { System.out.println(e); } } //调用Transformation示例: public void runTrans(String filename) throws Exception { KettleEnvironment.init(); TransMeta transMeta = new TransMeta(filename); Trans trans = new Trans(transMeta); trans.prepareExecution(null); trans.startThreads(); trans.waitUntilFinished(); if (trans.getErrors()!=0) { System.out.println("Error"); } } public static void main(String[] args) { try { //new Test().runJob("script/j1.kjb"); new Test().runTrans("script/t1.ktr"); } catch (Exception e) { e.printStackTrace(); } }}

转载于:https://my.oschina.net/u/572987/blog/281222

你可能感兴趣的文章
Mysql忘记密码后如何重置
查看>>
inotify + rsync实现web镜像实时同步
查看>>
基于Oracle的私有云架构探析(连载一)
查看>>
一个资深技术人的转型之路
查看>>
OSI模型、TCP/IP模型 的协议分布
查看>>
如何选择最好的VDI瘦客户端
查看>>
题目《让 CPU 占用率曲线听你指挥》
查看>>
IO-概述-输入和输出
查看>>
sar命令
查看>>
关于PHP项目的学习
查看>>
远程连接mysql速度慢
查看>>
MySQL中show status的参数详解
查看>>
虚拟化网络之OpenvSwitch(三)
查看>>
android学习之手机防盗Two
查看>>
封装的可以控制往图片上写字,控制字符间距的方法
查看>>
证书格式简介及不同格式之间的转换方式
查看>>
Cisco 交换机端口镜像
查看>>
Web Service 实例
查看>>
Linux module 原理与实现
查看>>
Android自动化测试之使用java调用monkeyrunner
查看>>