目录程序员
2、转换数据库
1. 步骤编程
2. 转换的跳缓存
3. 并行安全
4. 数据行服务器
5. 数据转换数据结构
Kettle是一款流行的ETL(Extract-Transform-Load,即数据抽取、转换、装载)工具,并可用来操做Hadoop上的数据。Kettle是用Java语言开发的。它最初的做者Matt Casters原是一名C语言程序员,在着手开发Kettle时仍是一名Java小白,可是他仅用了一年时间就开发出了Kettle的第一个版本。虽然有不少不足,但这版毕竟是可用的。使用本身并不熟悉的语言,仅凭一己之力在很短的时间里就开发出了复杂的ETL系统工具,做者的开发能力和实践精神使人十分佩服。后来Pentaho公司得到了Kettle源代码的版权,Kettle也随之改名为Pentaho Data Integration,简称PDI。
1、Kettle设计原则
Kettle工具在设计之初就考虑到了一些设计原则,这些原则也借鉴了之前使用过的其它一些ETL工具积累下的经验和教训。
- 易于开发
Kettle认为,做为ETL的开发者,应该把时间用在建立应用解决方案上。任何用于软件安装、配置的时间都是一种浪费。例如,为了建立数据库链接,不少和Kettle相似的Java工具都要求用户手工输入数据驱动类名和JDBC URL链接串。尽管用户能够经过互联网都能搜索到这些信息,但这明显把用户的注意力转移到了技术方面而非业务方面。Kettle尽可能避免这类问题的发生。
- 避免自定义开发
通常来讲,ETL工具要使简单的事情更简单,使复杂的事情成为可能。ETL工具提供了标准化的构建组件来实现ETL开发人员不断重复的需求。固然能够经过手工编写Java代码或Java脚原本实现一些功能,但增长的每一行代码都给项目增长了复杂度和维护成本。因此Kettle尽可能避免手工开发,尽可能提供组件及其各类组合来完成任务。
- 全部功能都经过用户界面完成
Kettle直接把全部功能经过界面的方式提供给用户,节约开发人员或用户的时间。固然专家级的ETL用户仍是要去学习隐藏在界面后的一些特性。在Kettle里,ETL元数据能够经过XML格式表现,或经过资源库,或经过使用Java API。不管ETL元数据以哪一种形式提供,均可以百分之百经过图形用户界面来编辑。
- 没有命名限制
ETL转换里有各类各样的名称,如数据库链接、转换、步骤、数据字段、做业等都要有一个名称。若是还要在命名时考虑一些限制(如长度、选择的字符等),就会给工做带来必定麻烦。Kettle具有足够的智能化来处理ETL开发人员设置的各类名称。最终ETL解决方案应该能够尽量地自描述,这样能够部分减小文档的需求,减小项目维护成本。
- 透明
Kettle不须要用户了解转换中某一部分工做是如何完成的,但容许用户看到ETL过程当中各部分的运行状态。这样能够加快开发速度、下降维护成本。
- 灵活的数据通道
Kettle从设计初始就在数据的发送、接收方式上尽量灵活。Kettle能够在文本文件、关系数据库等不一样目标之间复制和分发数据,从不一样数据源合并数据也是内核引擎的一部分,也一样很简单。
- 只映射须要映射的字段
在一些ETL工具里常常能够看到数百行的输入和输出映射,对于维护人员来讲这是一个噩梦。在ETL开发过程当中,字段要常常变更,这样的大量映射也会增长维护成本。Kettle的一个重要核心原则就是,在ETL流程中全部未指定的字段都自动被传递到下一个组件。也就是说输入中的字段会自动出如今输出中,除非中间过程特别设置了终止某个字段的传递。
- 可视化编程
Kettle能够被归类为可视化编程语言(Visual Programming Languages,VPL),由于Kettle可使用图形化的方式定义复杂的ETL程序和工做流。Kettle里的图就是转换和做业。可视化编程一直是Kettle里的核心概念,它可让用户快速构建复杂的ETL做业和下降维护工做量。Kettle中的设计开发工做几乎均可以经过简单的拖拽来完成。它经过隐藏不少技术细节,使IT领域更接近于商务领域。
2、转换
转换(transformation)是Kettle ETL解决方案中最主要的部分,它处理抽取、转换、装载各阶段各类对数据行的操做。转换包括一个或多个步骤(step),如读取文件、过滤输出行、数据清洗或将数据装载到数据库等等。
转换里的步骤经过跳(hop)来链接,跳定义了一个单向通道,容许数据从一个步骤向另外一个步骤步骤流动。在Kettle里,数据的单位是行,数据流就是数据行从一个步骤到另外一个步骤的移动。

图1显示了一个转换例子,该转换从数据库读取数据并写入文本文件。除了步骤和跳,转换还包括了注释(note)。注释是一个文本框,能够放在转换流程图的任何位置。注释的主要目的是使转换文档化。
1. 步骤
步骤是转换的基本组成部分,它以图标的方式图形化地展示,这里显示了两个步骤,“表输入”和“文本文件输出”。一个步骤有几个关键特性:
- 步骤须要有一个名字,这个名字在转换范围内惟一。
- 每一个步骤都会读写数据行。
- 步骤将数据写到与之相连的一个或多个输出跳,再传送到跳的另外一端的步骤。对另外一端的步骤来讲,这个跳就是一个输入跳,步骤经过输入跳接收数据。
- 步骤能够有多个输出跳。一个步骤的数据发送能够被设置为轮流发送或复制发送。轮流发送是将数据行依次发给每一个输出跳,复制发送是将所有数据行发送给全部输出跳。参见“完全搞清 Kettle 数据分发方式与多线程”
- 在运行时,一个线程运行一个步骤或步骤的一份拷贝,如图中“表输入”步骤左上角的X4,表示4个线程执行该步骤,数据行将复制4倍。全部步骤的线程几乎同时运行,数据行连续地流过步骤之间的跳。
2. 转换的跳
跳(hop)就是步骤间带箭头的连线,跳定义了步骤之间的数据通路。跳其实是两个步骤之间的被称为行级(row set)的数据行缓存。行集的大小能够在转换的设置里定义,缺省为10000行。当行集满了,向行集写数据的步骤将中止写入,直到行集里又有了空间。当行集空了,从行集读取数据的步骤中止读取,直到行集里又有可读的数据行。注意,跳在转换里不能循环,由于在转换里每一个步骤都依赖于前一个步骤获取字段。
3. 并行
跳的这种基于行集缓存的规则容许每一个步骤都由一个独立的线程运行,这样并发程度最高。这一规则也容许以最小消耗内存的数据流的方式来处理。在数据分析中,咱们常常要处理大量数据,因此这种并发低耗内存的方式也是ETL工具的核心需求。
对于Kettle转换,不可能定义一个步骤在另外一个步骤以后执行,由于全部步骤都以并发方式执行:当转换启动后,全部步骤都同时启动,从它们的输入跳中读取数据,并把处理过的数据写到输出跳,直到输入跳再也不有数据,就停止步骤的运行。当全部的步骤都停止了,整个转换就停止了。从功能的角度看,转换具备明确的起点和终点。这里显示的转换起点是“表输入”步骤,由于这个步骤生成数据行。终点是“文本文件输出”步骤,由于这个步骤将数据写到文件,并且后面再也不有其它节点。
一方面,能够想象数据沿着转换里的步骤移动,造成一条行头到尾的数据通路。而另外一方面,转换里的步骤几乎是同时启动的,因此不可能判断出哪一个步骤是第一个启动的步骤。若是想要一个任务沿着指定的顺序执行,那么就要使用后面介绍的“做业”了。
4. 数据行
数据以数据行的形式沿着步骤移动。一个数据行是零到多个字段的集合,字段包括这里所列的几种数据类型。
- String:字符类型数据。
- Number:双精度浮点数。
- Integer:带符号64位长整型。
- BigNumber:任意精度数值。
- Date:带毫秒精度的日期时间值。
- Boolean:取值为true或false的布尔值。
- Binary:二进制类型,能够包括图形、音视频或其它类型的二进制数据。
每一个步骤在输出数据行时都有对字段的描述,这种描述就是数据行的元数据,一般包括下面一些信息:
- 名称:行里的字段名应该是惟一的。
- 数据类型:字段的数据类型。
- 长度:字符串的长度或BigNumber类型的长度。
- 精度:BigNumber数据类型的十进制精度。
- 掩码:数据显示的格式(转换掩码)。若是要把数值型(Number、Integer、BigNumber)或日期类型转换成字符串类型就须要用到掩码。例如在图形界面中预览数值型、日期型数据,或者把这些数据保存成文本或XML格式就须要用到这种转换。
- 小数点:十进制数据的小数点格式。不一样文化背景下小数点符号是不一样的,通常是点(.)或逗号(,)。
- 分组符号(数字里的分割符号):数值类型数据的分组符号,不一样文化背景下数字里的分组符号也是不一样的,通常是逗号(,)或点(.)或单引号(')。
- 初始步骤:Kettle在元数据里还记录了字段是由哪一个步骤建立的。可让用户快速定位字段是由转换里的哪一个步骤最后一次修改或建立。
当设计转换时有几个数据类型的规则须要注意:
- 行集里的全部行都应该有一样的数据结构。就是说:当从多个步骤向一个步骤里写数据时,多个步骤输出的数据行应该有相同的结构,即字段相同、字段数据类型相同、字段顺序相同。
- 字段元数据不会在转换中发生变化。就是说:字符串不会自动截去长度以适应指定的长度,浮点数也不会自动取整以适应指定的精度。这些功能必须经过一些指定的步骤来完成。
- 默认状况下,空字符串被认为与NULL相等,但能够经过一个参数kettle_empty_string_differs_from_null来设置。
5. 数据转换
既能够显式地转换数据类型,如在“字段选择”步骤中直接选择要转换的数据类型,也能够隐式地转换数据类型,如将数值数据写入数据库的varchar类型字段。这两种形式的数据转换其实是彻底同样的,都是使用了数据和对数据的描述。
(1)Date和String的转换
Kettle内部的Date类型里包含了足够的信息,能够用这些信息来表现任何毫秒精度的日期、时间值。若是要在String和Date类型之间转换,惟一要指定的就是日期格式掩码。这里显示的是几个日期转换例子。
转换掩码(格式) |
结果 |
yyyy/MM/dd’T’HH:mm:ss.SSS |
2019/12/06T21:06:54.321 |
h:mm a |
9:06 PM |
HH:mm:ss |
21:06:54 |
M-d-yy |
12-6-19 |
(2)Numeric和String的转换
Numeric数据(包括Number、Integer、BigNumber)和String类型之间的转换用到的几个字段元数据是:转换掩码、小数点符号、分组符号和货币符号。这些转换掩码只是决定了一个文本格式的字符串如何转换为一个数值,而与数值自己的实际精度和舍入无关。这里显示了几个经常使用的例子。
值 |
转换掩码 |
小数点符号 |
分组符号 |
结果 |
1234.5678 |
#,###.### |
. |
, |
1,234.57 |
1234.5678 |
000,000.00000 |
, |
. |
001.234,56780 |
-1.9 |
#.00;-#.00 |
. |
, |
-1.9 |
1.9 |
#.00;-#.00 |
. |
, |
1.9 |
12 |
00000;-00000 |
|
|
00012 |
(3)其它转换
最后一个表格提供了Boolean和String之间、整型与日期类型之间数据类型转换的列表。
从 |
到 |
描述 |
Boolean |
String |
转换为Y或N,若是设置长度大于等于3,转换为true或false |
String |
Boolean |
字符串Y、True、Yes、1都转换为true,其它字符串转换为false(不区分大小写) |
Integer |
Date |
整型和日期型之间转换时,整型就是从1970-01-01 00:00:00 GMT开始计算的毫秒值。 |
Date |
Integer |
3、做业
大多数ETL项目都须要完成各类各样的维护任务。例如,当运行中发生错误,要作哪些操做;如何传送文件;验证数据库表是否存在,等等。而这些操做要按照必定顺序完成。由于转换以并行方式执行,就须要一个能够串行执行的做业来处理这些操做。
一个做业包括一个或多个做业项,这些做业项以某种顺序来执行。做业执行顺序由做业项之间的跳(job hop)和每一个做业项的执行结果来决定。图2显示了一个典型的装载数据仓库的做业。

1. 做业项
做业项是做业的基本构成部分。如同转换的步骤,做业项也可使用图标的方式图形化展现。可是,若是再仔细观察,仍是会发现做业有一些地方不一样于步骤:
- 新步骤的名字应该是惟一的,但做业项能够有影子拷贝,如图中的“错误邮件”。这样能够把一个做业项放在多个不一样的位置。这些影子拷贝里的信息都是相同的,编辑了一份拷贝,其它拷贝也会随之修改。
- 在做业项之间能够传递一个结果对象(result object)。这个结果对象里包含了数据行,它们不是以流的方式来传递的,而是等一个做业项执行完了,再传递给下一个做业项。
- 默认状况下,全部的做业项都是以串行方式执行的,只是在特殊的状况下以并行方式执行。
由于做业顺序执行做业项,因此必须定义一个起点,如图中的“start”做业项,就定义了一个起点。一个做业只能定义一个开始做业项。
2. 做业跳
做业的跳是做业项之间的链接线,它定义了做业的执行路径。做业里每一个做业项的不一样运行结果决定了做业的不一样执行路径。对做业项的运行结果的判断以下:
- 无条件执行:不论上一个做业项执行成功仍是失败,下一个做业项都会执行。这是一种黑色的链接线,上面有一个锁的图标,如图2中 “start”到“传送数据”做业项之间的连线。
- 当运行结果为真时执行:当上一个做业项的执行结果为真时,执行下一个做业项。一般在须要无错误执行的状况下使用。这是一种绿色链接线,上面有一个对钩号的图标,如图2中的横向的三个连线。
- 当运行结果为假时执行:当上一个做业项的执行结果为假或没有成功时,执行下一个做业项。这是一种红色的链接线,上面有一个红色的叉子图标。
在做业项链接(跳)的右键菜单上,或跳的小图标里均可以设置以上这三种判断方式。
3. 多路径和回溯
Kettle使用一种回溯算法来执行做业里的全部做业项,并且做业项的运行结果(真或假)也决定执行路径。回溯算法就是:假设执行到了图里的一条路径的某个节点时,要依次执行这个节点的全部子路径,直到没有再能够执行的子路径,就返回该节点的上一节点,再反复这个过程。

例如,图3里的A、B、C三个做业项的执行顺序为:
- 首先“Start”做业项搜索全部下一个节点做业项,找到了“A”和“C”。
- 执行“A”
- 搜索“A”后面的做业项,发现了“B”。
- 执行“B”。
- 搜索“B”后面的做业项,没有找到任何做业项。
- 回到“A”,也没有发现其它做业项。
- 回到“Start”,发现另外一个要执行的做业项“C”。
- 执行“C”。
- 搜索“C”后面的做业项,没有找到任何做业项。
- 回到“Start”,没有找到任何做业项。
- 做业结束。
由于没有定义执行顺序,因此这个例子的执行顺序除了ABC,还能够有CAB。这种回溯算法有两个重要特征:
- 由于做业能够是嵌套的,除了做业项有运行结果,做业也须要一个运行结果,由于一个做业能够是另外一个做业的做业项。一个做业的运行结果,来自于它最后一个执行的做业项。这个例子里做业的执行顺序能够是ABC,也能够是CAB,因此不能保证做业项C的结果就是做业的结果。
- 做业里容许循环。当在做业里建立了一个循环,一个做业项就会被执行屡次,做业项的屡次运行结果会保存在内存里,便于之后使用。
4. 并行执行
有时候须要将做业项并行执行。这种并行执行也是能够的。一个做业项能以并发的方式执行它后面的做业项,如图4中上面的做业所示。在这个例子里,做业项A和C几乎同时启动。

须要注意的是,若是A和C是顺序的多个做业项,那么这两组做业项也是并行执行的,如图5所示。

在这个例子中,做业项[A、B、写日志]和[C、D、清空表]是在两个线程里并行执行的。一般设计者也是但愿以这样的方式执行。但有时候,设计者但愿一部分做业项并行执行,而后再串行执行其它做业项。这就须要把并行的做业项放到一个新的做业里,而后做为另外一个做业的做业项,如图6所示。

5. 做业项结果
做业执行结果不只决定了做业的执行路径,并且还向下一个做业项传递了一个结果对象。结果对象包括了这里所示的一些信息。
- 一组数据行:在转换里使用“复制行到结果”步骤能够设置这组数据行。与之对应,使用“从结果获取行”步骤能够获取这组数据行。在一些做业项里,如“Shell脚本”、“转换”、“做业”的设置里有一个选项能够循环执行这组数据行,这样能够经过参数化来控制转换和做业。
- 一组文件名:在做业项的执行过程当中能够得到一些文件名。这组文件名是全部与做业项发生过交互的文件的名称。例如,一个转换读取和处理了10个XML文件,这些文件名就会保留在结果对象里。使用转换里的“从结果获取文件”步骤能够获取到这些文件名,除了文件名还能获取到文件类型。“通常”类型是指全部的输入输出文件,“日志”类型是指Kettle日志文件。
- 读、写、输入、输出、更新、删除、拒绝的行数和转换里的错误数。
- 脚本做业项的退出状态:根据脚本执行后的状态码,判断脚本的执行状态,再执行不一样的做业流程。
JavaScript做业项是一个功能强大的做业项,能够实现更高级的流程处理功能。在JavaScript做业项里,能够设置一些条件,这些条件的结果,能够决定最终执行哪条做业路径。
4、转换或做业的元数据
转换和做业是Kettle的核心组成部分。在介绍Kettle设计原则时曾经讨论过,它们能够用XML格式来表示,能够保存在资料库里,也能够用Java API的形式来表示。它们的这些表示方式,都依赖于这里所列的元数据。
- 名字:转换或做业的名字,尽管名字不是必要的,但应该使用名字,不管是在一个ETL工程内仍是在多个ETL工程内,都应该尽量使用惟一的名字。这样在远程执行时或多个ETL工程共用一个资源库时都会有帮助。
- 文件名:转换或做业所在的文件名或URL。只有当转换或做业是以XML文件的形式存储时,才须要设置这个属性。当从资源库加载时,没必要设置这个属性。
- 目录:这个目录是指在Kettle资源库里的目录,当转换或做业保存在资源库里时设置。当保存为XML文件时,不用设置。
- 描述:这是一个可选属性,用来设置做业或转换的简短的描述信息。若是使用了资源库,这个描述属性也会出如今资源库浏览窗口的文件列表中。
- 扩展描述:也是一个可选属性,用来设置做业或转换的详细的描述信息。
5、数据库链接
Kettle里的转换和做业使用数据库链接来链接到关系型数据库。Kettle数据库链接实际是数据库链接的描述:也就是创建实际链接须要的参数。实际链接只是在运行时才创建,定义一个Kettle的数据库链接并不真正打开一个数据库的链接。

1. 通常选项
各个数据库的行为都不是彻底相同的,如图7所示的Kettle数据库链接窗口里有不少种数据库,并且数据库的种类还在不断增多。
在数据库链接窗口中主要设置三个选项:
- 链接名称:设定一个在做业或转换范围内惟一的名称。
- 链接类型:从数据库列表中选择要要链接的数据库类型。根据选中数据库的类型不一样,要设置的访问方式和链接参数设置也不一样。某些Kettle步骤或做业项生成SQL语句时使用的方言也不一样。
- 访问方式:在列表里能够选择可用的访问方式,通常都使用JDBC链接。不过也可使用ODBC数据源、JNDI数据源、Oracle的OCI链接(使用Oracle命名服务)。
根据选择的数据库不一样,右侧面板的链接参数设置也不一样,例如图7中,只有Oracle数据库能够设置表空间选项。通常经常使用的链接参数为:
- 主机名:数据库服务器的主机名或IP地址。
- 数据库名:要访问的数据库名。
- 端口号:默认是选中的数据库服务器的默认端口号。
- 用户名和密码:链接数据库服务器的用户名和密码。
2. 特殊选项
对于大多数用户来讲,使用数据库链接窗口的“通常”标签就足够了。但偶尔也可能须要设置对话框里的“高级”标签的内容,如图8所示。

- 支持Boolean数据类型:对Boolean(bit)数据类型,大多数数据库的处理方式都不相同,即便同一个数据库的不一样版本也可能不一样。许多数据库根本不支持Boolean类型。因此默认状况下,Kettle使用一个char(1)字段的不一样值(如Y或N)来代替Boolean字段。若是选中了这个选项,Kettle就会为支持Boolean类型的数据库生成正确的SQL方言。
- 双引号分割标识符:强迫SQL语句里的全部标识符(如列名、表名)加双引号,通常用于区分大小写的数据库,或者怀疑Kettle里定义的关键字列表和实际数据库不一致。
- 强制转为小写:将全部表名和列名转为小写。
- 强制转为大写:将全部表名和列名转为大写。
- 默认模式名:当不明确指定模式名时默认的模式名。
- 链接后要执行的SQL语句:通常用于创建链接后,修改某些数据库参数,如Session级的变量或调试信息等。
除了这些高级选项,在链接对话框的 “选项”标签下,还能够设置数据库特定的参数,如一些链接参数。为了便于使用,对于某些数据库(如MySQL),Kettle提供了一些默认的链接参数和值。有几种数据库类型,Kettle还提供了链接参数的帮助文档,经过单击“选项”标签中的“帮助”按钮能够打开对应数据库的帮助页面。
最后,还能够选择Apache的通用数据库链接池的选项。若是运行了不少小的转换或做业,这些转换或做业里又定义了生命期短的数据库链接,链接池选项就显得有意义了。链接池选项不会限制并发数据库链接的数量。
3. 关系数据库的力量
关系数据库是一种高级的软件,它在数据的链接、合并、排序等方面有着突出的优点。和基于流的数据处理引擎,如Kettle相比,它有一大优势:数据库使用的数据都存储在磁盘中。当关系型数据库进行链接或排序操做时,只要使用这些数据的引用便可,而不用把这些数据装载到内存里,这就体现出明显的性能方面的优点。但缺点也是很明显的,把数据装载到关系数据库里也会产生性能的瓶颈。
对ETL开发者而言,要尽量利用数据库自身的性能优点,来完成链接或排序这样的操做。若是不能在数据库里进行链接这样的操做,如数据的来源不一样,也应该如今数据库里排序,以便在ETL里作链接操做。
4. 链接和事务
数据库链接只在执行做业或转换时使用。在做业里,每个做业项都打开和关闭一个独立的数据库链接。转换也是如此。可是由于转换里的步骤是并行的,每一个步骤都打开一个独立的数据库链接并开始一个事务。尽管这样在不少状况下会提升性能,但当不一样步骤更新同一个表时,也会带来锁和参照完整性问题。
为了解决打开多个链接而产生的问题,Kettle能够在一个事务中完成转换。在转换设置对话框的 “杂项”标签中,设置“使用惟一链接”,能够完成此功能。当选中了这个选项,全部步骤里的数据库链接都使用同一个数据库链接。只有全部步骤都正确,转换正确执行,才提交事务,不然回滚事务。
5. 数据库集群
当一个大数据库再也不知足需求时,就会考虑用不少小的数据库来处理数据。一般可使用数据库分片技术来分散数据装载。这种方法能够将一个大数据集分为几个数据分区(或分片),每一个分区都保存在独立的数据库实例里。这种方法的优势显而易见,能够大幅减小每一个表或每一个数据库实例的行数。全部分片的组合就是数据库集群。
通常采用标识符计算余数的方法来决定分片的数据保存到哪一个数据库实例里。这种分片计算方法获得的分片标识是一组0到“分片数-1”之间的数字,能够在数据库链接对话框的“集群”标签下设置分区数。例如,定义了五个数据库链接做为集群里的五个数据分片。能够在“表输入”步骤里执行一个查询,这个查询就以分区的方式执行:一样的一个查询会被执行五遍,每一个数据分区执行一遍。在Kettle里,全部使用数据库链接的步骤均可以使用分片的特性。例如,表输出步骤在分片模式下会把不一样的数据行输出到不一样的数据分区(片)中。参见“Kettle数据库链接中的集群与分片”
6、工具
Kettle里有不一样的工具,用于ETL的不一样阶段。主要工具包括:
- Spoon:是图形化工具,用于快速设计和维护复杂的ETL工做流。
- Kitchen:运行做业的命令行工具。
- Pan:运行转换的命令行工具。
- Carte:轻量级Web服务器,用来远程执行转换或做业,一个运行有Carte进程的机器能够做为从服务器,从服务器是Kettle集群的一部分。
参见“Kettle工具——Spoon、Kitchen、Pan、Carte”。
7、资源库
当ETL项目规模比较大,有不少ETL开发人员在一块儿工做,开发人员之间的合做就显得很重要。Kettle以插件的方式灵活定义不一样种类的资源库,但不管是哪一种资源库,它们的基本要素是相同的:这些资源库都使用相同的用户界面、存储相同的元数据。目前有3种常见资源库:数据库资源库、Pentaho资源库和文件资源库。
- 数据库资源库:数据库资源库是把全部的ETL信息保存在关系数据库中,这种资源库比较容易建立,只要新建一个数据库链接便可。可使用“数据库资源库”对话框来建立资源库里的表和索引。
- Pentaho资源库:Pentaho资源库是一个插件,在Kettle的企业版中有这个插件。这种资源库实际是一个内容管理系统(CMS),它具有一个理想的资源库的全部特性,包括版本控制和依赖完整性检查。
- 文件资源库:文件资源库是在一个文件目录下定义一个资源库。由于Kettle使用的是Apache VFS虚拟文件系统,因此这里的文件目录是一个普遍的概念,包括zip文件、Web服务、FTP服务等。
不管哪一种资源库都应该具备下面的特性:
- 中央存储:在一个中心位置存储全部的转换和做业。ETL用户能够访问到工程的最新视图。
- 文件加锁:防止多个用户同时修改。
- 修订管理:一个理想的资源库能够存储一个转换或做业的全部历史版本,以便未来参考。能够打开历史版本,并查看变动日志。
- 依赖完整性检查:检查资源库转换或做业之间的相互依赖关系,能够确保资源库里没有丢失任何连接,没有丢失任何转换、做业或数据库链接。
- 安全性:安全性能够防止未受权的用户修改或执行ETL做业。
- 引用:从新组织转换、做业,或简单从新命名,都是ETL开发人员的常见工做。要作好这些工做,须要完整的转换或做业的引用。
8、虚拟文件系统
灵活而统一的文件处理方式对ETL工具来讲很是重要。因此Kettle支持URL形式的文件名,Kettle使用Apache的通用VFS做为文件处理接口,替用户解决各类文件处理方面的复杂状况。例如,使用Apache VFS能够选中.zip压缩包内的多个文件,和在一个本地目录下选择多个文件同样方便。这里显示的是VFS的一些典型的例子。
文件名例子 |
描述 |
文件名:/data/input/customets.dat |
这是最典型的定义文件的方式 |
文件名:file:///data/input/customers.dat |
Apache VFS能够从本地文件系统中找到文件 |
做业:http://www.kettle.be/GenerateRows.kjb |
这个文件能够加载到Spoon里,可使用Kitchen执行,能够在做业项里引用。这个文件经过Web服务器加载 |
目录:zip:file:///C:/input/salesdata.zip 通配符:.*\.txt$ |
在“文本文件输入”这样的步骤里能够输入目录和文件通配符。例子里的文件名和通配符的组合将查找zip文件里的全部以.txt结尾的文件 |