搓圆揉扁Kettle软件工具Kettle

Kettle初识

2017-03-11  本文已影响8813人  熊颀

背景

最近因公司项目原因,接触到了Kettle这样一款ETL工具。计划在这段学习与使用的过程中,将自己的心得体会,完成几篇文章作为自己的积累,同时也非常高兴分享给大家。

Kettle介绍

ETL 是Extract-Transform-Load三个单词的简称,即抽取、转换、加载。ETL工具常用于建立数据仓库,但不仅限于这一领域。换句话话说,使用ETL 工具我们可以完成从目标数据源进行数据抽取,经过一系列的数据转换,最终形成需要的数据模型并加载到数据仓库中。

Kettle是一款采用纯JAVA实现的开源ETL工具,属于开源商务智能软件Pentaho的一个重要组成部分。Kettle提供一系列的组件用于完成各种上面所说的抽取、转换、加载的工作。正如Kettle一词的中文意思水壶一样,Kettle的开发人员希望使用kettle处理数据就像从水壶中倒水出来一样--把各种数据放到一个壶里,然后以一种指定的格式流出

Kettle中两个核心是转换(transformation)作业(job)

名词解释

设置命名参数
运行是赋值

Kettle的组件

kettle组件,图片来源《使用PDI构建开源ETL解决方案 [MATT CASTERS著;初建军,曹雪梅译]》

Kettle提供了如下组件:

从图中可知,实际使用Kettle时,利用Spoon做为开发工具,设计好作业与转换,以及相关参数与变量并保存在资源库中。生成环境中,使用kitchen或pan启动作业或转换。同时,根据实际需求与数据量,决定是否使用carte进行远程调用或者集群部署。

转换与作业的执行方式

Kettle中使用转换(transformation)完成数据ETL全部工作。转换由多个步骤(step)组成,如文本文件输入,过滤输出行,执行SQL脚本等。各个步骤使用跳(hop)来链接。 跳定义了一个数据流通道(也就是上图看到的带箭头的连线),即数据由一个步骤流(跳)向下一个步骤。在Kettle中数据的最小单位是行(row),数据流中流动其实是缓存的行集(RowSet)

值得注意的是,跳的箭头方向单单只是指出了数据的流向,为步骤指明了从哪读入数据以及向哪儿写入数据, 这与步骤的执行顺序无关。实际上Kettle的转换没有真正的起点与终点。因为,为了提高效率,转换中的每个步骤都是同时启动,并且拥有独立执行线程。输出的步骤不断向数据流中写入数据,直到行集满了则停止,当又有空间时继续写入。而从数据流读入数据的步骤则不停读入,直到数据流空了则停止,当又有数据时继续读入。而当所有步骤都停止了,则整个转换完成。

设计一个从文件读取10000条数据并将读入数据插入数据库中的转换来验证这一点:


这里我将行集最大行数设为了100,这样可以看得比较清楚。我们可以看到文本文件输入执行SQL脚本两个步骤都在运作中,且一个在不断输入(从文件)与写入(行集),而另一个则不断读入(行集)与写出(生成SQL执行)。

因为转换(transformation)以并行方式执行,所以必须存在一个串行的调度工具来执行转换,这就是kettle中的作业(job)

kettle-spoon 作业演示
作业中必须有个表示开始strat步骤。以串行的方式先执行转换1然后根据执行结果判定是发送成功邮件还是失败邮件。

常用集成解决方案

实际生产当中我们不太可能打开spoon,以人工形式来执行作业或转换,这就需要一种集成方案,来通过我们的应用程序自动的执行作业或转换。
这里有两套执行方案:
一是比编写好kitchen或者pan脚本,通过应用程序调用这些脚本。或者将脚本放入系统定时任务中,以周期形式来调用;
二是利用carte搭建服务器,应用程序远程调用服务启动作业或转换;
三是可以完全将kettle的API集成到应用程序,以代码的形式,通过API来调用,甚至代替spoon来进行维护。
以上三种方案都是可以实现的,采用哪套,完全取决于实际项目需求。

后续

这篇随笔文章只是浅浅介绍了下kettle的一些基本知识,也是目前我所了解到的。如有不足处或错误处还望大牛们指出。
kettle是开源的,为了深入理解其内部实现原理同时能够实现项目上的一些个性化的需求,我的下一步计划是对kettle的源码进行一些分析。

上一篇下一篇

猜你喜欢

热点阅读