Kettle 作业(Job)和 转换(Transform)
作业(Job)由一个个步骤组成,转换只是作业的其中一个步骤。
Kettle的控件分为2种:作业(Job)和转换(Transform)。
对于作业和转换,重点记住以下3点:
- 作业是步骤流,转换是数据流。这是作业和转换最大的区别;
- 作业的每一个步骤,必须等到前面的步骤都跑完了,后面的步骤才会执行;而转换会一次性把所有控件全部先启动(一个控件对应启动一个线程),然后数据流会从第一个控件开始,一条记录、一条记录地流向最后的控件;
- 如果想在作业中实现把上一个步骤(trans)的数据流传给下一个步骤(trans),可以通过在上一个步骤的最后一步使用“Copy rows to result”控件,在下一个步骤的开始第一个控件使用“Get rows from result”,这样可以实现跨步骤的数据传递。或者利用一个文件、数据库表进行中转;
关于步骤流和数据流
步骤就是完成工作的其中一个阶段,每个步骤都完成了一件独立的事情,步骤与步骤之间是独立的,但有先后顺序,步骤的组合可以形成一个工作流。比如我要上学这个工作,需要经过以下步骤:起床、洗刷、吃早餐、出门坐校车、下车去教室。每个步骤之间是有先后关系,按顺序组合之后,就完成了“去上学”这个工作;
数据流是指从输入控件(Input)到输出控件(Output)之间的数据流动,针对的是在数据流动过程中的每一行记录、每一列数据的处理 。比如增加一个字段、对字段A截取前3位得到新的字段B、把字段A、B 串联成新的字段C,按字段A、B组合,汇总字段C(SELECT C1, C2,SUM(C3) FROM 表 GROUP BY C1, C2);
作业的控件:
- 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:把每一行记录的每个字段写到日志去;
等等,以上控件针对的都是每行记录、每个字段进行处理,必须要有输入 -> 输出,以输入控件开始,以输出控件结束。
作业和转换的嵌套关系
- 作业可以调另一个作业(用General->Job控件),强调的是父作业与子作业;
- 作业可以调一个转换(用General->Transformation控件),强调的是其中一个步骤;
- 转换可以调一个作业(用Flow->Job Executor控件),执行结果会变成数据流里的新的一列数据,强调的是执行结果;
- 转换可以调另一个转换(用Flow->Transformation Executor控件),执行结果会变成数据流里的新的一列数据,强调的是执行结果;