kettle Hello World教程重构

kettle Hello World教程重构

      重构Hello World 示例

前面示例,转换已经创建并成功执行,本示例任务是增强这个例子。

 

概述

下面是对现有示例进行改进的内容:

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,修改一些选项,如日志级别等。


展开阅读全文

没有更多推荐了,返回首页