kettle中作业和转换的关系

Posted on Posted in kettle基础概念

一、作业job是多个转换的任务的集合。通过kitchen.sh(厨房)来执行。

 例如:./kichen.sh -file ./YourScirpts/demo.kjb

二、转换是某个节点,听过pan.sh“煎锅”来执行。

例如:./pan.sh -file ./YourScripts/demo.ktr

通过厨房和煎锅的关系,就可以理解作业和转换的关系。作业是带有定时或者循环执行功能的转换,可以理解为对转换的组织和装配。可以通过作业管理转换,也可以单独通过其他的定时任务来管理转换,比如crontab等。

作业job可以理解为带有定时执行功能的转换,可以对多个转换进行组织、编排,实现更加强大的功能。

一般来说,简单的作业,通过转换就可以完成,不一定要通过job作业。

总结,两句话:

  1. job带有定时功能的转换。

  2. job可以对转换进行编排,实现更加复杂和强大的功能

  3. 简单的功能可以通过转换实现,转换和作业两者相互支持,但是,相互独立。可以只通过转换完成,也可以将转换封装到作业中。

  4. 如果用crontab或者java等第三方调用,可以直接使用转换。

*******************************    以下由黎老湿创作,一家之言,不喜勿喷    *******************************
 
 
Kettle的控件分为2种:作业(Job)和转换(Transform)。
 
 
 
 
 
1、重要3点
 
 
对于作业和转换,重点记住以下3点:
 
1、作业是步骤流,转换是数据流。这是作业和转换最大的区别。
2、作业的每一个步骤,必须等到前面的步骤都跑完了,后面的步骤才会执行;而转换会一次性把所有控件全部先启动(一个控件对应启动一个线程),然后数据流会从第一个控件开始,一条记录、一条记录地流向最后的控件;
3、如果想在作业中实现把上一个步骤(trans)的数据流传给下一个步骤(trans),可以通过在上一个步骤的最后一步使用“Copy rows to result”控件,在下一个步骤的开始第一个控件使用“Get rows from result”,这样可以实现跨步骤的数据传递。或者利用一个文件、数据库表进行中转。
 
 
 
 
 
2、什么是步骤流?什么是数据流?
 
 
步骤就是完成工作的其中一个阶段,每个步骤都完成了一件独立的事情,步骤与步骤之间是独立的,但有先后顺序,步骤的组合可以形成一个工作流。比如我要上学这个工作,需要经过以下步骤:起床、洗刷、吃早餐、出门坐校车、下车去教室。每个步骤之间是有先后关系,按顺序组合之后,就完成了“去上学”这个工作;
 
数据流是指从输入控件(Input)到输出控件(Output)之间的数据流动,针对的是在数据流动过程中的每一行记录、每一列数据的处理,比如增加一个字段、对字段A截取前3位得到新的字段B、把字段A、B 串联成新的字段C,按字段A、B组合,汇总字段C(SELECT C1, C2,SUM(C3) FROM 表 GROUP BY C1, C2);
 
作业(Job)由一个个步骤组成,转换只是作业的其中一个步骤。
 
下面举例说明:
 
作业的控件:
 
 
Mail -> Mail:用于发送一份邮件;
 
 
File Managemeng -> Create a File:用于创建一个文件;
 
Conditions -> File Exists:判断文件是否存在;
 
Scripting -> SQL:用于执行一段SQL
 
等等,以上控件都是完成了一项单独的工作,并不需要我们很细致地指定一条条记录如何处理。
 
 
转换的控件:
 
 
Input -> Text File Input:加载一个文本文件的记录,可以指定每个字段的类型、长度、分隔符等;
 
Output -> Text File Output:把记录写到一个文本文件,可以指定每个字段的类型、字符集、长度、分隔符、日期格式等;
 
Transform -> Concat Fields:把2个字段合并成一个新的字段;
 
Utility -> Write to log:把每一行记录的每个字段写到日志去;
 
 
等等,以上控件针对的都是每行记录、每个字段进行处理,必须要有输入 -> 输出,以输入控件开始,以输出控件结束。
 
3、作业、转换的嵌套关系
 
 
作业可以调另一个作业(用General->Job控件),强调的是父作业与子作业;
 
作业可以调一个转换(用General->Transformation控件),强调的是其中一个步骤;
 
转换可以调一个作业(用Flow->Job Executor控件),执行结果会变成数据流里的新的一列数据,强调的是执行结果;
 
转换可以调另一个转换(用Flow->Transformation Executor控件),执行结果会变成数据流里的新的一列数据,强调的是执行结果;
 
 
4、几种异常情况说明
 
 
4.1 对于以下情况,在作业里执行SQL控件,和在转换里执行SQL控件,记录会在什么时候被插入表里?
 
 
答案:作业在运行8秒后插入记录,转换会在刚开始运行时被插入表,没有延时。
          原因是是作业是步骤流,而转换是数据流,见文章开头的说明。