Kettle Job机制
Kettle Job机制
1 Job机制
一个job项代表ETL控制流中的一项逻辑任务。Job项将会顺序执行,每个job项会产生一个结果,能作为别的分支上job项的条件。
1.1 Job类图简介
1.2 JobEntryInteface接口
JobEntryInterface是Job Entry插件的主要实现接口。主要包含以下功能:
1) 保存Job Entry设置
实现类使用私有变量保存设置的参数,通过get、set方法获取和设置。Dialog实现类会通过这些方法,保存或设置设置界面上的参数。同时,需要提供一个深度拷贝的方法,因为在一些保存参数且可能修改的地方会调用。
2) 序列化插件
插件要实现对本插件的序列化,实现两种方式xml与数据库。
3) 输出信息提供
一个job entry支持三种类型的输出:true、flase和无条件。这三种情况不是所有的job entry插件都会同时支持的,例如dummy job entry仅支持true和false。所以,插件必须显现两类函数,来查看支持哪种结果。
public booleanevaluates()//是否支持true、false
public booleanisUnconditional()//是否支持无条件执行
4) 执行任务
负责工作的执行。
public Resultexecute()
//执行具体的逻辑,需要结果和开始到该项的距离
prev_result.setNrErrors()//设置执行过程中的异常数
prev_result.setResult()//设置结果,如果不知道true/false,结果不设置
最后返回prev_result。
1.3 JobEntryDialogInteface接口
负责构建和打开参数设置对话框。Spoon通过调用open函数打开该对话框,spoon是使用swt框架的,所以对话框也应使用swt来实现。
2 Job entry交互通信类
Result: 每一个jobEntryInterface的实现类在完成相应功能时,返回结果的类型, 主要成员变量:
private booleanresult;执行是否出现异常
private intexitStatus; 执行结果状态
privateList<RowMetaAndData> rows;
一个jobEntry完成处理后的数据(若存在)
privateMap<String, ResultFile> resultFiles;
3 Job配置及开启
Job开启时序图
Job的开启与Trans相类似,配置执行的参数,检查.kjb文件是否发生变化,实例化一个Job对象,开启该线程。
4 Job执行
4.1 初始执行excute1( )
主要工作是从JobMeta的JobHopMeta找到job入口jobentry信息,根据开始条件调用真正执行jobentry的execute方法2,代码如下所示:
startpoint=jobMeta.findJobEntry(JobMeta.STRING_SPECIAL_START,0, false);// 找到Job开始组件
JobEntrySpecialjes = (JobEntrySpecial) startpoint.getEntry();
//JobEntrySpecial是启动job的job项目
Result res =null;
while ((jes.isRepeat() || isFirst) && !isStopped()){
//符合开始条件时,调用execute方法2
isFirst = false;
res = execute(0,null, startpoint, null,
Messages.getString("Job.Reason.Started"));
}
4.2 实际执行excute2()
execute()方法包含,的参数有执行次数(START不算,从0开始,顺序执行)、接一个Entry执行结果、当前Entry的拷贝、前一个Entry拷贝和原因。
主要功能是根据参数startpoint,提取对应的jobentry,执行对应的jobentry操作,再根据JobMeta的hop信息依次得到下一个jobentry,递归调用。具体的执行步骤如下所示:
Job执行步骤:
5 JobEntry执行
5.1 JobEntry类
具体每个组件的执行体对应org.pentaho.di.job.entries包内每个entry的具体实现。
execute()方法2中调用jobEntry的execute()完成jobEntry的具体功能。
5.2不同jobEntry的实现
final Resultresult = cloneJei.execute(prevResult, nr, rep, this);
不同的Job项目(JobEntry)实现差别很大。
JobEntrySpecial:
功能是开启一个job,只是简单地对传递来的preResult设置它的的result属性值为true,(Job项目据此判断前一结果执行完毕)。返回该对象即可。
JobEntryTableExit:
功能是判断一个table是否存在数据库中。JobEntryTableExitJob项目有属性tablename和DatabaseMeta(对数据库的元数据信息描述)根据DatabaseMeta得到一个Dabase对象 db,建立连接db.connect(); 调用db.checkTableExists(tablename)根据此返回值设置preResult的result属性为否为true。返回 preResult对象。
JobEntryTrans:
JobEntryJob和JobEntryTrans是嵌套job或trans的Job项目(JobEntry)。它们是比较复杂的job项目。
作用是执行一个trans。首先实例化一个TransMeta,之后实例化Trans。调用trans.start(),当执行完毕后调用函数trans.getResult(),并把结果加到preResult中,返回该对象即可。
补充说明:
Result中也可以有处理数据,这些处理数据可以作为下一个Job项目(JobEntry)的输入。但是容量受内存容量限制。
Kettle Job机制相关推荐
- kettle job如何利用java的反射机制获取执行的sql语句
kettle job中的JavaScript如何获取同一个job中SQL步骤的执行语句并让执行语句记录在日志中呢?首先写日志需要用到job中JavaScript写日志的方法,其次是利用java反射机制 ...
- kettle开发篇-缓存机制-Day7
前言: kettle 虽然作为较成熟稳定的数据处理工具,但也存在一些需要优化地方,如果没有深入了解kettle当出现类似产品问题的时候,可能会就束手无策了.今天就和大家聊聊kettle中缓存机制,和我 ...
- kettle全量抽数据_漫谈数据平台架构的演化和应用
随着科技的发展,数据在当代社会中所起的作用越来越大.阿里巴巴集团创始人马云在2014年提出了DT(Data Technology)的概念:"人类正从IT时代走向DT时代".DT的核 ...
- Kettle和ETL的基本构成
这里,我说的通俗易懂点,好方便大家的理解. ETL解决方案就像业务流程一样,具有输入.输出,以及一个或多个工作环节,处理步骤.同样的,这些步骤也具有输入和输出,并可以执行将一个输人转化为输出的操作. ...
- 六种 主流ETL 工具的比较(DataPipeline,Kettle,Talend,Informatica,Datax ,Oracle Goldengate)...
六种 主流ETL 工具的比较(DataPipeline,Kettle,Talend,Informatica,Datax ,Oracle Goldengate) 比较维度\产品 DataPipeline ...
- 【转】Kettle集群
Kettle集群 Kettle是一款开源的ETL工具,以其高效和可扩展性而闻名于业内.其高效的一个重要原因就是其多线程和集群功能. Kettle的多线程采用的是一种流水线并发的机制,我们在另外的文章中 ...
- kettle中java组件_kettle系列-[KettleUtil]kettle插件,类似kettle的自定义java类控件
该kettle插件功能类似kettle现有的定义java类插件,自定java类插件主要是支持在kettle中直接编写java代码实现自定特殊功能,而本控件主要是将自定义代码转移到jar包,就是说自定义 ...
- kettle的基本介绍
Kettle 主要内容: 一.ETL介绍 二.Kettle介绍 三.Java调用Kettle API 一.ETL介绍 1. ETL是什么? 1).ETL分别是"Extract".& ...
- kettle于javascript步骤错误处理
javascript步骤错误处理 假设你熟悉kettle误差特性转换.你可能想知道javascript步骤如何使用.骤用户界面机制是同样的,在javascript步骤右击,选择"定义错误处理 ...
最新文章
- 如果你的船不进来,就游出去迎接它 乔纳森温特斯
- 基站寻找邻居节点索引号的MATLAB代码
- vmstat命令 查看内存、CPU占用
- solr(六): 集群
- 电路分压的基本公式忘记了~~
- svn执行Cleanup总是提示cleanup failed的解决方法
- IDEA单机,双人五子棋
- 【三维CAD设计经验分享】CrownCAD设计:旋转和扫描
- 动态设置Button图片大小
- 板内板间通信协议及接口(六)RS232 RS485 RS422
- OpenWRT-Wifidog之利用Luci认证
- 软件测试如何提高测试的覆盖率,测试覆盖率是什么?
- 荣耀v40和华为nova8参数对比哪个好 华为nova8和荣耀v40的区别
- 单向链表与双向链表的区别
- LT-mapper,LT-removert代码运行与学习
- Android 刷机/Root/安装Xposed
- 【Android Framework (六) 】- Launcher
- HTML5新控件 - 颜色选择器
- 简述弹性盒子 flex 布局及 rem 布局
- GPL/wide-dhcpv6/dhcp6c源代码分析
热门文章
- 京东云开发者|深入JDK中的Optional
- linux 暂停实时日志,Linux 实时查看日志文件动态内容
- 国内哪个域名注册商比较好?怎样选择域名注册商?
- Java自学习day15-抽象类练习-编写工资系统,实现不同类型员工(多态)的按月发放工资
- python 画子图股票成交量图像
- 如何更改母版的公司名称及logo
- Software Testing - 如何测试机器学习算法正确性
- War3Tool dota改键v3.3版
- MaxViT实战:使用MaxViT实现图像分类任务(一)
- 诵读中国大赛网络评选投票微信图文投票怎么制作怎么制作投票页面