下面是对现有示例进行改进的内容:
l 在相同文件夹下,如果是一个新输入文件,文件夹时基于转换保存的路径,但是名称不可能是固定的,所以转换将其视为一个参数。
l 你将验证输入文件是否存在(执行转换时,设置一个不存在文件名称,看会发生什么)
l 输出文件的名称依据输入文件的名称。
下面将要做的:
l 创建输出文件,并加上问候(greetings);
l 检查参数是否为空,如果是,失败;
l 检查文件是否存在,如果是,失败;
我们通过作业(job)来完成,job是有job项和连接组成;这些项和连接根据期望的执行顺序排序;所以,job也是基于流程控制。
job项是执行在job内部的一个单元,每个项被设计去完成特定的功能,如验证表是否存在或发送邮件。在job中可以执行转换或作业,所以,作业和转换也是job项;
连接是两个job项的执行顺序的图像展示方式。
一般连接有一个源和目标,但是有时,job项能多个连接输入,或有多个连接输出。
总体流程如下:
定义一个新的转换去获取参数;
然后验证参数,验证验证结果决定下一步执行条件;
验证文件是否存在作为一个job项;
job中执行的主要任务是有稍微不同的转换组成,上节中我们已经学习过了;
图示如下:
这部分教程里,输入文件和输出文件将保存在一个新文件夹Files下,首先我们要这个创建文件夹,并拷贝list.csv文件到里面。
为了避免每次都写完整的路径名称,我们创建一个变量包含文件夹或文件的引用信息。因此,编辑kettle.properties配置文件。该文件在
Windows XP/2000是C:\Documents and Settings\<username>\.kettle* 文件夹,win7是在 C:\users\<username>\.kettle* 文件夹, 其他平台是*~/.kettle
这个目录. 打开文件在文件内容的最后,增加一行;修改路径只向你刚创建的目录。
FILES=/home/PentahoUser/Files
spoon启动时,读取该文件,所以为了起作用,需要重新启动。
重启后,做下面三个步骤:
l 创建转换
l 修改转换
l 构建作业
1) 创建一个新的转换,命名为get_file_name.
2) 拖动下图中的步骤到工作区中,然后根据下图连接他们。
get System info(输入类别),Filter Rows和Abort的属于(流程类别),
set Variable 属于job类别
3) 按照下面的描述配置步骤
配置get System Info步骤
这个步骤获取转换以外的来源,如系统日期或命令行参数,这里,你将用这个步骤获得第一个也是唯一的参数。在该步骤的配置窗口有一个表格,你填写的每行,将成为输出数据中新的列。
1) 双击该步骤
2) 在第一个单元格中,在name列下面,输入my_file.
3)
当你点击type列下面的单元格,带有选项的窗口弹出,这里选择
command line argument 1.
4) 点击确定。
配置the Filter Rows Step
这个步骤有两个输出分支,根据上面的条件。
1) 双击该步骤
2) 写条件:在field中选择my_file,然后用 is null 代替 等号;
3) 然后true条件,连接 Abort;
4) false,连接set Variable;
5) 点击确定完成;
现在null参数,将到达Abort步骤,当参数为not null时,到达set Variable步骤
配置Abort步骤
这步骤不需要任何配置,如何一行数据到达这步,则转换就中止,然后失败,我们可以在主job中使用这个结果。
配置 set variable 步骤
该步骤创建一个变量,然后把输入字段的内容赋值到其中,配置窗口有一个表格,每行表示产生一个新变量。
1) 双击步骤,
2) 点击获取参数,唯一存在的字段my_file自动出现,缺省的变量名称是字段的大写MY_FILE。保持缺省值不变。
3) 点击确定。
执行并测试
1) 点击run(运行),测试转换;
2) 在运行对话框中,在左下角的命令行参数表格中,如果已经存在内容就删除先,然后第一个参数值中点些list,作为命令行参数传递给转换。
3) 点击运行;
4) 在日志区域,能看到消息:
5) 再次点击运行,并清除第一个命令行参数值,然后确定运行,日志消息如下:
修改之前的转换
现在修改之前的hello.ktr转换,让文件名称和参数进行匹配。如果在job中设置命令行参数为foo,则转换读取foo.csv文件,并且创建foo_with_greetings.xml.同时,增加一个过滤器去除空行;
1) 打开Hello.ktr转换;
2) 打开csv File input 步骤配置窗口;
3) 删除文件名称文本框的内容,ctrl+alt + space 在弹出下拉框中可以看到FILES变量;最终输入内容:${FILES}/${MY_FILE}.csv
4) 点击确定
5) 打开xml output step 配置界面
6) 用下面的内容代替文件名称文本框的值:${FILES}/${MY_FILE}_with_greetings;
7) 点击显示文件名称预览xml文件名称,我们看到${FILES}被我们设置的值代替了;
8) 点击确定完成。
9) 拖到一个Filter Rows 步骤到工作区
10) 拖动Filter Rows 到csv Input和JavaScript代码之间的连接,当你看到连线变粗时,放开鼠标,这时,新的步骤就自动插入到两个步骤之间了;
11) 配置,选择name字段,条件选择Is NOT NULL;
12) 保持true到达步骤不变,false到达步骤为空,为了确保只有数据行中的name字段不空才能流向到下一步;
13) 点击确定
14) 另存为 Hello_with_parameters;
执行并测试转换(Hello_With_parameters)
为了测试,首先确保MY_FILE变量存在且有值;因为转换依赖该变量;所以执行测试前,我们手工创建这变量;
1) 在编辑菜单中,点击设置环境变量,弹出窗口中出现变量的列表;
2) 在列表的最后一行,输入MY_FILE作为变量名称,内容输入文件名称,但是不要写扩展名;
3) 点击确定并运行;
4) 在运行配置界面的变量列表中,能看到我们创建的便利,然后运行该转换;
5) 最后验证输出内容;
构建主作业
最后一个任务,是建主job;
1、 创建job
1) 点击新建,选择job;
2) 在job工作区中,我们可以拖动job项和连接;
3) 在编辑菜单或上下文菜单中选择设置
4) 弹出窗口中可以设置job的一些属性,输入名称和描述;
5) 点击保存,保持job到我们文件夹中,输入名称为Hello;
如下图所示:
2、 详细的步骤及流程如下:
在工作区的左边有job项窗口;拖入下面的步骤到工作区中;
1) 在General类别中,start步骤,transformation步骤,File Exist(文件存在,在条件类别中)步骤,transformation步骤;
2) 拖动两个Abort到工作区中,一个连接到transformation步骤,另一个连接File Exists步骤
3) 配置第一个转换步骤
a) 双击第一个转换步骤,弹出配置窗口
b) 在文件名文本框中,写如下内容:
${Internal.Job.Filename.Directory}/get_file_name.ktr
当然我们假设转换和作业是保存在同一个文件夹中;
4) 配置第二个转换步骤
a) 双击该job项,弹出配置窗口;
b) 文件名文本框中录入如下内容:
${Internal.Job.Filename.Directory}/Hello_with_parameter.ktr
c) 点击确定;
5) 配置文件存在job项
a) 双击该项,弹出配置窗口;
b) 在文件名文本框中录入需验证文件的完整路径,和之前录入的名称一致;${FILES}是在kettle.properties中定义的;
6) 配置连接到get_file_name转换的中止步骤
a) 在消息文本框中填写:
The file name argument is missing(文件名称参数丢失)
7) 配置连接到文件存在的中止步骤
a) 在消息文本框中填写:The file ${FILES}/${MY_FILE}.csv does not exist,鼠标移动到消息文本框中,可以看到完整路径的提示;
配置job连接
job项一般总是被执行,无论前一步执行成功或失败;执行情况用不同的颜色代替,黑色连接线表示总是执行,绿色表示只有前一步骤成功执行才执行,红色表示只有前一步执行失败才执行。
在本例中,job项被创建并按照不同的颜色进行连接,意味着按照我们设想的情况进行执行,详细说明如下:
l 第一个转换项步骤总是被执行(从开始步骤到其颜色为黑色)
l 如果第一个转换没有配置参数,(会执行失败),红色连接则控制流程到中止项步骤;
l 如果第一项转换成功执行,绿色连接控制流程到文件存在job项;
l 如果文件不存在,则验证文件存在失败,红色连接控制流程到第二个中止项;
l 如果验证成功,绿色连接控制流程到主转换项;
如果你想改变job项的执行条件,步骤如下:
a) 选择到达某项的连接;
b) 右击显示上下文菜单;
c) 点击Evaluation(评估),选择三个条件中一个;
当执行一个作业时,作业项的执行顺序取决连接的方向和条件,从而决定某项是否被执行;执行是基于顺序流,直到前一个job项执行完毕后才执行下面job项;
一般实际应用中,job中执行顺序转换;如果你需要转换的一部分完成之前,就开始执行其他部分,那只能把该转换拆分到两个相关的转换中,并放置在就哦不,一个接着一个;
执行job
为了执行该job,首先需要提供参数,因为get_file_name转换中需要提供参数(我们仅用变量存储参数的值),设置参数步骤如下:
a) 双击get_file_name转换;
b) 弹出配置窗口,点击参数选项,在表格的第一行,写list;
c) 确定,然后点击run按钮,在弹出的运行配置对话框中,点击launch
d) 下面视图中显示执行结果;
在执行结果视图中,job指标选项显示所有job项以及执行结果;job项是按顺序执行,如果某项失败,则后面的项则不被显示出来,因为他们没有被执行过;
在日志选项中,能看到详细的日志信息:包括job项的开始和结束时间,特别是当某项是转换时,日志中也包括了转换的详细日志;
当你在日志最后看到:Spoon - Job has ended.则成功生成了一个新的文件;如果输入文件是list.csv,则在同一文件夹中生成的输出文件为list_with_greetings.xml,打开并验证其内容。
现在改变参数名称,输入一个不存在的文件名,并执行该job;你将看到job中止,在日志中显现内容:Abort - The file <parameter> does not exist
现在尝试删除参数并执行,同样job会中止,日志显示如下:
Abort - The file name is missing
kittchen
Kitchen是在终端窗口中执行的工具,在windows中为Kitchen.bat,其他平台为Kitchen.sh;我们可以在安装目录中,如果你执行该命令,可以看到参数选项列表;
可以尝试执行如下命令:
kitchen /file <Jobs_path>/Hello.kjb <par> /norep
/norep 表示不要连接资源库
/file 表示执行job的文件名称,需要完整的路径;
c:/Pentaho/Tutorial (Windows)
/home/PentahoUser/Tutorial
<par>是job执行需提供的参数,我们参数是执行文件的名称,不带csv扩展名;
其他选项取默认值;
输入上述命令并执行,和spoon中执行一致,除了日志在终端显示,我们也可以重定向到文件;除了格式有点不同,内容几乎一致;
执行job不带参数,用无效参数,使用有效参数,验证所有的期望结果;也联系使用kitchen,修改一些选项,如日志级别等。
文本文件输入(text input):读取大量不同的文本文件。大多是通过工具生成的CSV文件。
表输入(table Input):常用来利用连接和SQL,从数据中读取信息,自动生成基本的SQL语句。
获取系统信息(get system info):这个步骤从
Kettle
环境中获取信息。
生成行(Generate Rows ):这个步骤输出一定数量的行,缺省为空。可选包括一定数量的静态字段。
Cube输入(文件反序列化)(De-serialize f
2.1.1IBMDataStage简介
IBM InfoSphereDataStage
是业界较为流行的ETL(Extract,Transform, Load)工具。它支持各种数据源和文件格式,可以满足大规模数据ETL需求。功能强大,可适用于多种类型的业务场景。而且比较灵活,拓展性强。
DataStage的应用程序设计采用图形界面[8]
CREATE TABLE `tmallorder` (
`datekey` INT(11) NOT NULL,-- 日期
`storename` VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, -- 店铺名称
`goodsname` VARCHAR(50) CH
Kettle
,也被称为Pentaho Data Integration,是一款强大的开源ETL(Extract, Transform, Load)工具。它可以用于数据抽取、转换和加载,以及数据集成和数据仓库构建。下面是一个简单的
Kettle
使用
教程
:
1. 安装
Kettle
:首先,你需要下载和安装
Kettle
。你可以从官方网站(https://sourceforge.net/projects/pentaho/)上下载安装程序,并按照安装向导进行安装。
2. 启动
Kettle
:安装完成后,你可以在安装目录中找到
Kettle
的启动文件(通常是一个.bat或.sh文件)。双击这个文件或通过命令行启动
Kettle
。
3. 创建一个新的转换(Transformation):在
Kettle
中,转换是指将一个或多个步骤(Steps)组合在一起以完成特定任务的过程。在
Kettle
的主界面上,点击“新建(New)”按钮,然后选择“转换(Transformation)”。
4. 添加步骤(Steps):一个步骤代表了数据处理过程中的一个单元操作。在转换设计器中,你可以从左侧的“设计区域(Design Area)”中拖拽不同的步骤到转换画布中,以构建你的数据处理流程。常用的步骤包括:输入(Input)、输出(Output)、过滤(Filter)、转换(Transformation)等。
5. 配置步骤:选择一个步骤后,你可以在右侧的“属性面板(Properties Panel)”中配置该步骤的属性。根据步骤的类型,你可以设置输入输出路径、字段映射、数据转换规则等。
6. 运行转换:当你完成了转换的设计和配置后,你可以点击工具栏上的“运行(Run)”按钮来执行转换。
Kettle
会按照你的设计和配置,从输入源抽取数据,经过转换处理,最后将结果加载到输出目标中。
7. 调试和优化:在运行转换过程中,你可以通过查看日志和调试信息来确保转换正常运行。如果遇到问题,你可以使用调试功能来逐步执行转换并检查每个步骤的输出结果。
这只是一个简单的
Kettle
使用
教程
,帮助你入门。
Kettle
还有很多高级功能和配置选项,可以根据具体需求进行学习和实践。你可以参考
Kettle
官方文档和在线资源来获取更多关于
Kettle
的信息和
教程
。