Kettle是一款国外开源的ETL(Extract-Transform-Load,数据抽取、转换、装载的过程)工具。Kettle现已更名为PDI(Pentaho-Data-Integration)Pentaho数据集成。kettle中文网 Kettle核心组件:Spoon、Pan、CHEF、Kitchen。
SPOON 允许你通过图形界面来设计ETL转换过程(Transformation)。
PAN 允许你批量运行由Spoon设计的ETL转换 (例如使用一个时间调度器)。Pan是一个后台执行的程序,没有图形界面。
CHEF 允许你创建任务(Job)。 任务通过允许每个转换,任务,脚本等等,更有利于自动化更新数据仓库的复杂工作。任务通过允许每个转换,任务,脚本等等。任务将会被检查,看看是否正确地运行了。
KITCHEN 允许你批量使用由Chef设计的任务 (例如使用一个时间调度器)。KITCHEN也是一个后台运行的程序。

Kettle中有两种脚本文件,transformation和job,transformation完成针对数据的基础转换,job则完成整个工作流的控制。

Kettle核心概念:可视化编程、转换、步骤、跳(Hop)、数据行、并行

转换:

转换是ETL中的最主要的部分,它处理抽取、转换、装载各种对数据行的操作。转换包含一个或多个步骤,如文件读取。过滤数据行、数据清洗或将数据加载到数据库。转换的步骤通过跳来连接,跳定义一个单向通道,允许数据从一个步骤向另一个步骤流动。在Kettle中,数据的单位是行,数据流就是数据行从一个步骤到另一个步骤的移动。
步骤的关键特性
①步骤需要有一个名字,这个名字在转换范围内唯一。
②每个步骤都会读、写数据行(除了“生成记录”步骤只写数据)。
③步骤将数据写到与之相连的一个或多个输出跳,再传送到跳的另一端的步骤。
④大多数步骤都可以有多个输出跳,一个步骤的数据发送可以被设置为分发和复制。分发是目标步骤轮流接收记录(默认),复制是所有的记录被同时发送到所有的目标步骤。

跳是步骤之间带箭头的连接,跳定义了步骤之间的数据通路。跳实际上是两个步骤之间的被称之为行集的数据行缓存(行集的大小可以在转换的设置里定义)。当行集满了,向行集写数据的步骤将停止写入,直到行集里又有了空间。当行集空了,从行集读取数据的步骤停止读取数据,直到行集里又有可读的数据行。
数据行的数据类型:一个数据行是零到多个字段的集合
①String字符型
②Number双精度浮点数
③Integer带符号整型64
④BigNumber任意精度数据
⑤Date带毫秒精度的日期时间值
⑥Boolean布尔值true false
⑦Binary二进制数据
并行
跳的基于行集缓存的规则允许每个步骤都是由一个独立的线程运行,这样并发程度最高。对于Kettle转换,不可能定义一个执行顺序,因为所有步骤都以并发方式执行:当转换启动后所有步骤都同时启动,从他们的输入跳中读取数据,并把处理过的数据写到输入跳,直到输入跳里不再有数据,就中止步骤的运行。当所有的步骤都中止了,整个转换就中止了(与数据流向区分开)。如果想要一个任务沿着指定顺序执行,那么就使用作业Job了。

输入
CSV文件输入、文本文件输入、Excel输入、Get data from XML、JSON input、生成记录、自定义常量数据、表输入;Access输入、Cube文件输入、ESRI shapefile reader、GZIP Analytics、HL7 input、LDAP输入、LDIF输入、Mondrian输入、OLAP输入、RSS输入、S3 CSV input、SAS输入、Salesforce input、XBase输入、XML input stream(StAX)、YAML输入、固定宽度文件输入、文件内容加载至内存、生成随机数、生成随机信用卡号、获取子目录名、获取文件名、获取文件行数、获取系统信息、获取表名、获取资源库配置、邮件信息输入、配置文件输入。
输入、多文件合并输入、更新、插入更新、删除。
转换
Concat fields、值映射、增加常量、增加序列、字段选择、计算器、剪切字符串、字符串替换、字符串操作、排序记录+去除重复记录、唯一行(哈希值)、拆分字段、列拆分为多行、列转行、行扁平化、行转列;Add XML、Add a checksum、Closure generator、Get ID from slave server、XSL transformation、将字段值设置为常量、数值范围、根据字段值来改变序列、设置字段值。

应用
写日志、替换NULL值;发送邮件、change file encoding、Clone row、EDI to XML、Zip文件、发送信息至syslog、启动一个进程、处理文件、延迟行、比较表、流的元数据、设置为NULL、运行SSH命令。

流程
Switch/case、过滤记录、空操作(什么也不做)、中止;Annotate stream、Blocking step、ETL metadata injection、Shared dimension、Single threader、Transformation executor、执行作业、数据流优先级排序、根据java代码过滤记录、检测空流、识别流的最后一行、追加流、阻塞数据直到步骤都完成。

查询
HTTP client、数据库查询、数据库连接、流查询;Column exists、HTTP post、REST client、Web服务查询、执行Dynamic SQL、检查web服务是否可用、检查文件是否存在、检查文件是否已被锁定、检查表是否存在、模糊匹配、调用DB存储过程。

连接
合并记录、记录关联(笛卡尔输出)、记录集连接(左/右/内/全连接);Multiway merge join、XML join、排序记录。

统计
分组;分析查询、单变量统计、在内存中分组、数据采样、样本行、转换步骤信息统计。

映射
映射(子转换)、映射输入规范、映射输出规范;Simple mapping(sub-transformation) 。

脚本
JavaScript代码、Java代码、执行SQL脚本(可用于更新数据)、Rules accumulator、Rules executor、公式、利用Janino计算Java表达式、执行SQL脚本(字段流替换)、正则表达式。

作业:

各种操作都是按照一定的顺序完成的,因为转换以并行的方式执行,就需要一个可以串行执行的作业来处理这些操作。一个作业包含一个或者多个作业项,这种作业项以某种顺序来执行。作业执行顺序由作业项之间的跳和每个作业项的执行结果来决定。
作业项
作业项是作业的基本构成方式,如同转换的步骤,作业项也可以使用图标的方式图形化展示。作业项之间是可以传递一个结果对象的,这个结果对象里面包含了数据行,它们不是以数据流的方式来传递的,而是等待一个作业项执行完了,再传递给下一个作业项。

起点
一个作业只能定一个开始作业项。

作业跳
作业跳是作业项之间的连接线,定义了作业的执行路径。作业里每个作业项的不同运行结果决定了作业的不同执行路径。
1.无条件执行
2.当运行结果为真时执行
3.当运行结果为假时执行

作业控件分类
通用、邮件、文件管理、条件、脚本、批量加载、Big Data、Modeling、XML、应用、资源库、文件传输、文件加密、Deprecated。

通用
Start、Dummy、作业、成功、设置变量、转换。

参数
全局参数、局部参数、参数的使用。
全局参数:通过当前用户下.kettle文件夹中的kettle.properties文件来定义。定义方式是采用“键=值”对方式来定。全局变量需要重启kettle才能生效。
局部参数:通过Set/Get variables方式来设置/获取。在设置参数时在当前转换中不能马上使用,需要在作业的下一步骤中使用。
参数的使用:使用%%变量名%%,或者使用${变量名}。在SQL中使用变量时需要把“是否替换变量”勾选上,否则变量无法生效。
转换命名参数:转换命名参数就是在转换内部定义的变量,作用范围是在转换内部。


欢迎指正,随时修改~