Kettle 程序分析
1. 简介
ETL 是数据抽取(Extract)、转换(Transform)、装载(Load)的过程。
Kettle 是一款国外开源的 ETL 工具,有两种脚本文件 transformation 和 job,transformation
完成针对数据的基础转换,job 则完成整个工作流的控制。
2. 相关概念
Job:一个作业,由不同逻辑功能的 entry 组件构成,数据从一个 entry 组件传递到另一个
entry 组件,并在 entry 组件中进行相应的处理。
Transformation:完成针对数据的基础转换,即一个数据转换过程。
Entry:实体,即 job 型组件。用来完成特定功能应用,是 job 的组成单元、执行单元。
Step:步骤,是 Transformation 的功能单元,用来完成整个转换过程的一个特定步骤。
Hop:工作流或转换过程的流向指示,从一个组件指向另一个组件,在 kettle 源工程中有三
种 hop,无条件流向、判断为真时流向、判断为假时流向。
3. 体系结构
kettle 平台是整个系统的基础,包括元数据管理引擎、数据集成引擎、UI 和插件管理模块。
(1) 元数据管理引擎
元数据管理引擎管理 ktr、kjb 或者元数据库,插件通过该引擎获取基本信息,主要包括
TransMeta、JobMeta 和 StepMeta 三个类。
TransMeta 类,定义了一个转换(对应一个.ktr 文件),提供了保存和加载该文件的方法;
JobMeta 类,同样对应于一个工作(对应一个.kjb 文件),提供保存和加载方法;
StepMeta 类,保存的是 Step 的一些公共信息的类,每个类的具体的元数据将保存在显示
了 StepMetaInterface 的类里面。
(2) 数据集成引擎
数据集成引擎包括 Step 引擎、Job 引擎和数据库访问引擎三大部分,主要负责调用插件,
并返回相应信息。
(3) UI
UI 显示 Spoon 这个核心组件的界面,通过 xul 实现菜单栏、工具栏的定制化,显示插件界
面接口元素,其中的 TransGraph 类和 JobGraph 类是用于显示转换和 Job 的类。
TransGraph 类
选中转换标签后,红框内的编辑区对象对应 org.pentaho.di.ui.spoon.trans 包中的 TransGraph
TransGraph 类与显示
类。
JobGraph 类
选中 Job 标签后,红框内的编辑区对象对应 org.pentaho.di.ui.spoon.job 包中的 JobGraph
JobGraph 类与显示
类。
(4) 插件管理模块
Kettle 是众多“可供插入的地方”(扩展点)和“可以插入的东西”(扩展)共同组成的集合
体。在我们的生活中,电源接线板就是一种“扩展点”,很多“扩展”(也就是电线插头)可以插
在它上面。
插件管理引擎主要负责插件的注册,在 Kettle 中不管是以后的扩展还是系统集成的功能,
本质上来讲都是插件,管理方式和运行机制是一致的。系统集成的功能点也均实现了对应的扩
展接口,只是在插接的说明上略有不同。
Kettle 的扩展点包括 step 插件、job entry 插件、Database 插件、Partioner 插件、debugging
插件。
4. 功能模块
Kettle 的主要包括四大功能模块:
Chef——工作(job)设计工具 (GUI 方式);
Kitchen——工作(job)执行器 (命令行方式);
Spoon——转换(transform)设计工具 (GUI 方式);
Span——转换(trasform)执行器 (命令行方式)。
(1) Chef—工作(job)设计器
这是一个 GUI 工具,操作方式主要通过拖拽。
何谓工作?多个作业项,按特定的工作流串联起来,形成一项工作。正如:我的工作是软
件开发。我的作业项是:设计、编码、测试!先设计,如果成功,则编码,否则继续设计,编
码完成则开始设计,周而复始,作业完成。
1) Chef 中的作业项
转换:指定更细的转换任务,通过 Spoon 生成,通过 Field 来输入参数;
SQL:sql 语句执行;
FTP:下载 ftp 文件;
邮件:发送邮件;
检查表是否存在;
检查文件是否存在;
执行 shell 脚本:如 dos 命令。
批处理:(注意:windows 批处理不能有输出到控制台)。
Job 包:作为嵌套作业使用。
JavaScript 执行:如果有自已的 Script 引擎,可以很方便的替换成自定义 Script,来扩
充其功能;
SFTP:安全的 Ftp 协议传输;
HTTP 方式的上传/下载。
2) 工作流
工作流是作业项的连接方式,分为三种:无条件,成功,失败。
为了方便工作流使用,KETTLE 提供了几个辅助结点单元(也可将其作为简单的作业项):
Start 单元:任务必须由此开始。设计作业时,以此为起点。
OK 单元:可以编制做为中间任务单元,且进行脚本编制,用来控制流程。
ERROR 单元:用途同上。
DUMMY 单元:什么都不做,主要是用来支持多分支的情况。
3) 存储方式
支持 XML 存储,或存储到指定数据库中。
一些默认的配置(如数据库存储位置……),在系统的用户目录下,单独建立了一个.Kettle 目
录,用来保存用户的这些设置。
4) LogView:
可查看执行日志。
(2) Kitchen—作业执行器
是一个作业执行引擎,用来执行作业。这是一个命令行执行工具,参数如下:
: Repository name 任务包所在存储名
: Repository username 执行人
: Repository password 执行人密码
: The name of the job to launch 任务包名称
: The directory (don't forget the leading / or /)
: The filename (Job XML) to launch
: The logging level (Basic, Detailed, Debug, Rowlevel, Error, Nothing) 指定日志级别
: The logging file to write to 指定日志文件
-rep
-user
-pass
-job
-dir
-file
-level
-log
-listdir : List the directories in the repository 列出指定存储中的目录结构。
-listjobs : List the jobs in the specified directory 列出指定目录下的所有任务
-listrep : List the defined repositories 列出所有的存储
-norep
: Don't log into the repository 不写日志
(3) Spoon—转换过程设计器
GUI 工作,用来设计数据转换过程,创建的转换可以由 Pan 来执行,也可以被 Chef 所
包含,作为作业中的一个作业项。
1) Input-Steps:输入步骤
Text file input:文本文件输入
可以支持多文件合并,有不少参数,基本一看参数名就能明白其意图。
Table input:数据表输入
实际上是视图方式输入,因为输入的是 sql 语句。当然,需要指定数据源(数据源的定制方
式在后面讲一下)
Get system info:取系统信息
就是取一些固定的系统环境值,如本月最后一天的时间,本机的 IP 地址之类。
Generate Rows:生成多行。
这个需要匹配使用,主要用于生成多行的数据输入,比如配合 Add sequence 可以生成一
个指定序号的数据列。
XBase Input
Excel Input
XML Input
2) Output-Steps: 输出步聚
Text file output:文本文件输出。这个用来作测试蛮好,呵呵。很方便的看到转换的输出。
Table output:输出到目的表。
Insert/Update:目的表和输入数据行进行比较,然后有选择的执行增加,更新操作。
Update:同上,只是不支持增加操作。
XML Output:XML 输出。
3) Look-up:查找操作
Data Base
Stream
Procedure
Database join
4) Transform 转换
Select values
对输入的行记录数据的字段进行更改 (更改数据类型,更改字段名或删除) 数据类型变更
时,数据的转换有固定规则,可简单定制参数。可用来进行数据表的改装。
Filter rows
对输入的行记录进行指定复杂条件的过滤。用途可扩充 sql 语句现有的过滤功能。但现有
提供逻辑功能超出标准 sql 的不多。
Sort rows
对指定的列以升序或降序排序,当排序的行数超过 5000 时需要临时表。
Add sequence
为数据流增加一个序列,这个配合其它 Step(Generate rows, rows join),可以生成序列表,
如日期维度表(年、月、日)。
Dummy
不做任何处理,主要用来作为分支节点。
Join Rows
对所有输入流做笛卡儿乘积。
Aggregate
聚合,分组处理
Group by
分组,用途可扩充 sql 语句现有的分组,聚合函数。但我想可能会有其它方式的 sql 语句
能实现。
Java Script value
使用 mozilla 的 rhino 作为脚本语言,并提供了很多函数,用户可以在脚本中使用这些函数。