Kettle初识

背景

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

Kettle介绍

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

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

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

  • 转换(transformation):完成数据ETL工作;如下图所示的在spoon中设计的转换流程。


    kettle-spoon 转换演示,从文件中读取数据并插入到数据库表中
  • 作业(job):定义一个完成整个工作流的控制;


    kettle-spoon 作业演示

名词解释

  • KETTLE_HOME: KETTLE_HOME是指kettle的home目录,默认位置为(以windows为例):C:\Users\Administrator\.kettle;我们可以通过设置系统环境变量KETTLE_HOME来自定义该目录位置。在KETTLE_HOME目录下会存在如下配置文件:

    • kettle.properties:全局环境参数配置文件;
    • repositories.xml:资源库描述文件;
    • share.xml:共享对象描述文件;
  • 资源库(repository):
    资源库相当于一个Kettle工程目录。这个工程所有的作业与转换,数据库连接信息,参数变量都将保存在这个资源库。启动一个作业与转换的前提条件也是先连接上所在的资源库。kettle中资源库分为文件资源库与数据库资源库。

    • **文件资源库 **需要指定一个文件系统的目录作为资源库根目录。使用文件资源库所有作业与转换会以文件的形式保存在该资源库根目录下。作业文件扩展名为.kjb,转换的件扩展名则为.ktr。文件资源库的好处是便于迁移,只要将.kjb.ktr拷贝到其他资源目录下就可以完成迁移。

    • 数据库资源库 需要指定一个数据库连接,这个连接可以是JDBC形式也可以是JNDI或ODBC。Kettel会生成一个数据库脚本,在指定数据库中生成一系列相关的表用于存储作业与转换以及相关的数据库连接信息和参数变量配置。数据库资源库的好处是安全,连接一个数据库资源库是需要进行用户认证的。
      可通过spoon界面中工具-》资源库-》连接资源 来选择连接指定资源库或者新建资源库。

  • 数据库连接: 创建资源库连接作为数据源或资源库。kettle支持绝大多多数数据库系统。

  • 元数据(meta):是指用于描述作业与转换属性的数据。上面说到的.kjb.ktr文件实际存储的就是元数据的描述信息,同样的数据库资源库中保存的也是元数据信息。执行转换和作业时,kettel首先加载的是各自的元数据,然后生成作业或转换实例,再执行。元数据好比是Class,而实例则是Object。

    转换与作业元数据

  • 变量与参数:

  • 变量(variable): 变量可以是定义在kettle.properties中的全局变量,也可以是通过设置变量步骤和获取变量步骤在作业运行中动态设置与使用;变量使用时的格式为${变量名};需要注意的是设置变量所设置的变量在同一个转换里是不能被获取变量获取的,必须在一个作业中的下一个转换中使用,这是因为转换的步骤是并行运行的(关于这点会在下面细说)。


  • 参数(parameter): 参数分为命名参数与位置参数,他们区别是是否存在参数名称。显然命名参数的名称,而且它还有默认值。我们可以在作业与转换的元数据中设置好命名参数以及它的默认值,在运行时传入指定值或者不传值使用默认值;
    而位置参数则是通过'?'作为站位符,运行时按传入顺序一个个替换为传入的值。

设置命名参数

运行是赋值

Kettle的组件

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

Kettle提供了如下组件:

  • spoon(汤勺):一个基于SWT的IDE工具。常用完成转换(transformation)与作业(job)脚本的设计;
  • kitchen(厨师):命令行工具,用于执行作业(job);
  • pan(煎锅): 命令行工具,用于执行转换(transformation);
  • carte(菜单): http服务器,用于监听HTTP请求,完成远程执行转换(transformation)与作业(job)。另外也可以用于实现集群。

从图中可知,实际使用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的源码进行一些分析。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容