kettle基础介绍
kettle,ETL工具的一种,现在kettle改名了,叫Pentaho Data Integration(PDI),但更多时候大家还是习惯用之前的名字kettle。
Kettle是一款国外开源的ETL工具,纯java编写(依赖jdk),可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定。
Kettle中有两种脚本文件,transformation(.ktr)和job(.kjb)
- transformation:完成针对数据的基础转换
- job:则完成整个工作流的控制。
kettle的四个核心组件
- SPOON(勺子): 允许你通过图形界面来设计ETL转换过程(Transformation)。 (GUI方式)
- PAN(平底锅):允许你批量运行由Spoon设计的ETL转换 (transform执行器)。(命令行方式)
- CHEF(厨师) :允许你创建任务(Job执行器)。 任务通过允许每个转换,任务,脚本等等,更有利于自动化更新数据仓库的复杂工作。任务通过允许每个转换,任务,脚本等等。任务将会被检查,看看是否正确地运行了。 (GUI方式)
- KITCHEN(厨房): 允许你批量使用由Chef设计的任务 (例如使用一个时间调度器)。(命令行方式)
kettle的概念模型:
Transformation 和 Job
1.Transformation:定义对数据操作的容器,数据操作就是数据从输入到输出的一个过程,可以理解为比Job粒度更小一级的容器,我们将任务分解成Job,然后需要将Job分解成一个或多个Transformation,每个Transformation只完成一部分工作。
(定义对数据操作的容器,数据操作就是数据从输入到输出的一个过程,可以理解为比作业粒度更小一级的容器,我们将任务分解成作业,然后需要将作业分解成一个或多个转换,每个转换只完成一部分工作。)
2.Step:是Transformation内部的最小单元,每一个Step完成一个特定的功能。
---------------------------------------------------------------------------
1.Job:负责将Transformation组织在一起进而完成某一工作,通常我们需要把一个大的任务分解成几个逻辑上隔离的Job,当这几个Job都完成了,也就说明这项任务完成了。
(负责将[转换]组织在一起进而完成某一块工作,通常我们需要把一个大的任务分解成几个逻辑上隔离的作业,当这几个作业都完成了,也就说明这项任务完成了。)
2.Job Entry:Job Entry是Job内部的执行单元,每一个Job Entry用于实现特定的功能,如:验证表是否存在,发送邮件等。可以通过Job来执行另一个Job或者Transformation,也就是说Transformation和Job都可以作为Job Entry。
---------------------------------------------------------------------------
Hop:用于在Transformation中连接Step,或者在Job中连接Job Entry,是一个数据流的图形化表示。在Kettle中Job中的JobEntry是串行执行的,故Job中必须有一个Start的JobEntry;Transformation中的Step是并行执行的。
| 转换 / 步骤 | 作业 / 作业项 |
|---|---|
| 转换主要用于数据的ETL。 | 组织多项任务执行(转换、作业)。 |
| 每个步骤都是单线程,当启动转换时,所有步骤的线程几乎并行执行。 | 所有的作业项是以某种自定义的顺序串行执行的。 |
| 步骤之间的数据以数据流方式传递。所有的步骤都会从它们的输入跳中读取数据,并把处理过的数据写到输出跳,直到输入跳里不再有数据就终止步骤的运行; | 作业项之间可以传递一个包含了数据行的结果对象。当一个作业项执行完成后,再传递结果对象给下一个作业项。 |
| 没有执行顺序,也就没有起点和终点。 | 有执行顺序,可定义起点和终点。 |
| 由于转换里的步骤依赖前一个步骤获取数据,因此转换里不能有循环。 | 作业里可以有循环。 |
数据流动
转换Hop跳:
转换跳是步骤之间带箭头的连线,也是两个步骤之间的被称为行集的数据行缓存。
- 当行集满了,向行集写数据的步骤将停止写入,直到行集又有空间。
- 当行集空了,从行集读取的步骤停止读取,直到行集里又有可读的数据行。
转换跳的这种基于行集缓存的规则允许每一个步骤都是有一个独立的线程运行,这样并发程度最高。这一规则也允许数据以最小的消耗内存的数据流的方式处理。在数据厂库中我们经常处理大量数据,所以这样并发低消耗内存的方式也是ETL工具的的核心需求。
JobHop跳:
作业的跳是作业项之间的连接线。他定义了作业的执行路径。作业里每个作业项的不同运行结果决定了作业的不同执行路径。
- 无条件执行:不论上个作业项执行成功或者失败,下一个作业项都会执行。这是一种蓝色的连接线,上面有一个锁的标。
- 当运行结果为真时执行:当上一个作业项执行结果为真时,执行下一个作业项。通常在需要无错误执行的情况下使用。这是一条绿色的连接线,上面有对勾号的图标。
- 当运行结果为假时执行:当上一个作业项执行结果为假或者没有执行成功,执行一按一个作业项,这是一条红色的连接线,上面有红色停止的图标。