开源ETL工具 Kettle(kettle 5.2.0)的使用之Hello World 扩展

来源:互联网 发布:windows 查看定时任务 编辑:程序博客网 时间:2024/04/29 12:43


这里只是简单的展示,图片没保存下来 请查看原文出处



继续前面的一篇,我们来接着学习kettle 上一篇的HelloWorld点这同样这篇依然是翻译官方的HelloWorld扩展。前面我们已经了解了转换的操作的基本步骤,现在我们来扩展他,使其功能更完善。摘要:

  1. 在这里我们不在固定的选取文件,而用传参数的方式选取文件名。
  2. 在用变量设置文件路径名的时候,验证文件是否存在
  3. 我们让输出的文件名来和输入文件名相关联
在这个扩展的转换中你回用到如下操作:
  1. 获取变量
  2. 创建一个表示“欢迎”(文件内容)的输出文件
  3. 检查参数是否为NULL,如果是,丢弃。
  4. 检查文件是否存在,不存在,丢弃。
这些操作将通过一个job来完成,所谓的job就是由一个个的【作业输入(Job Entries)】组件组成,并由连线连接起来。这些Job Entries按照一定的流程顺序先后执行,因此说job是基于流程操作的。每一个Job Entry 都是Job中的一个执行单元,每一个Job Entry都被设计用来完成一个特定的功能,例如:验证一个文件是否存在,或者发送一封电子邮件。我们可以通过一个Job来执行一个转换【Transfromation】获取另一个的Job,所以说Job和转换都可以作为另一个Job的Job Entry。Hop(节点连接)是用来表示两个Job Entries 执行顺序的图形化表示。一个Job Entry 可以有多条Hop连入,也可以连出多条Hop。也就是说一个Job Entry可一个通过多个Hop实现多输入,和多输出。但是一条Hop只能链接一个输入和一个输出。这个Job的大体流程是这个样子的:
  1. 新建一个转换,用来获取参数(parameter )
  2. 这个参数将通过这个转换得到验证,通过这个转换中某个步骤
  3. 通过一个Job Entry 来验证文件是否存在
  4. 通过修改前一个HelloWorld中的转换,我们在这个Job中复用。
这个主Job的绘制中的流程图:捕获

 准备工作

在这个教程中,输入和输出文件将被存放在新的文件夹中,重新创建一个文件夹叫做Files的文件夹。将我们上次创建的list.csv文件,复制到我们新建的文件夹。为了避免我们在每次输入文件路径的时候,都要输入文件的绝对路径,我们可以创建一个变量包含这个路径,然后在每次需要输入路径的时候我们引用这个变量。我们只要修改kettle.properties这个文件中的内容就好了,这个文件一般默认存放在C:\Documents and Settings\<username>\.kettle* folder on Windows XP/2000, C:\Profiles\<username>\.kettle* folder on Windows Vista or the *~/.kettle这个目录中,不同的操作系统可能目录会有不同,在这个文件中加入下面一行:FILES=F:\\workspace\\kettleSpoon会在启动的时候读取这个配置文件,这个文件必须在Spoon重新启动后才会生效。等号前面是变量名,后面是值,在这个键值对中表示文件存放路径。

创建一个提取文件名的转换

向前面一样创建一个转换,并命名为 get_file_name.从左面拖拽Step构成如下图所示的流程,只要拖拽流程这里不再给出可以参照前一篇的讲解:捕获

现在我们为上面的Step做详细的配置

1. 配置获取系统信息的步骤不废话,直接上图吧。捕获双击【获取系统信息】这个步骤,得到如上图所示的配置信息窗口。我们可以自己取一个步骤的名字,然后在下面的表格中填入命令行参数,每一行代表一个命令行参数,名称自己任取,然后类型我们选择命令行参数1。然后确定。2.配置过滤记录步骤这个步骤根据一个条件把输出一分为二,当条件为true的时候流向其中的一个分支,当false的时候流向另一个分支。双击这个步骤,然后看到如下配置窗口,然后如下图:捕获 3.配置终止步骤这个~没什么好配置的吧,如果一个转换到了这步,就意味着这个转换就挂了呗。4.配置【设置变量】步骤在这部中你可以设置一些变量。在这步的配置信息窗口中有个表格,表格中的每一行代表了一个变量。双击图标,得到如下图的配置信息窗口:捕获直接点击【获取字段】,然后就会如上图所示,然后或生成一个字段名大写的变量名,我们暂时不修改它,直接使用这个默认的生成名字。当然你可以任意修改。确定。

 我们来测试执行一下这个转换

1.工具栏点击那个绿色的三角符号,来运行,会弹出一个配置窗口2.在这个配置窗口中,在左下方有个位置参数【Arguments】配置表格,删除表格中所有的数据,然后在第一行中的value的地方填写list 也就是CSV的文件名。这个参数将在这个转换中被转化成命令行参数。3.点击启动4.然后删除我们写入的参数,再次运行,观察比较两次控制台上的输出的不同。有图有真相,对照下图进行配置:捕s获

修改Hello转换

这时候就要用到我们前面做的那个叫Hello的转换,为了能使用参数,我们来修改这个转换。如果传入这个Job的命令行参数为foo 那么我们修改后的这个转换将执行foo.csv并且创建一个名字为foo_with_greetings.xml 的输出文件。同样我先给出步骤,再给出截图,你可以直接跳过步骤看截图:最终效果图如下:捕获4
  1. 打开Hello.ktr 这个转换文件,可以从Spoon中选择文件--->打开,也可以直接把这个文件拖入Spoon左侧的目录中
  2. 双击打开【CSV文件输入】这步骤的配置窗口
  3. 删除文件名 这个文本框中的内容,然后按住Ctrl + 空格 [+ Alt] 如果是中的话还要Alt,就好看到我们添加到kettle中参数FILES
  4. 选择他,并且添加你创建的文件名变量结果如下:
    ${FILES}/${MY_FILE}.csv
  5. 点击确定
  6. 结果如下图捕获2
  7. 打开【文本文件输出】步骤如下图:捕获3如图所示在标号为1的地方为输出文件存放路径,我直接放在test的目录下了,这个你随便选,标号为2 的地方为文件名,我们用输入名做输出名的前缀,所以用到了变量。
  8. 确定
  9. 从左侧拖拽【过滤记录】步骤到【csv文件输入】和【JavaScript代码】两个步骤的连线上,释放然后这个步骤就好被添加到那两个步骤中间。
  10. 配置这个过滤,如图:捕获a
  11. 不要忘了添加一个【终止】步骤,这个和 get_file_name 一样,不说了
  12. 保存,也可以另存为。。。随便
  13. 测试运行这个转换:你必须设置MY_FILE 变量,并为他赋值,因为这个转换依赖前一个转换的结果,为了模拟这个过程,我们手动为其附变量值。
  14. 菜单栏    编辑 ----->  设置环境变量捕获z如图我们看到FILES是我们在配置文件中写入的变量,已经加载过来了,然后我们现在填写MY_FILE变量,list是那个csv文件,注意上面的FILES + MY_FILE 要真的在你的电脑上能找到这个文件。
  15. 好了现在可以运行了。应该没问题吧

组装我们的大Job

现在所有的小组件【转换】都写完了,我们现在来组装这些转换,最终组成一个Job
  1. 创建一个job,如下图,至于怎么拖拽的我就不说了,通过上面那么多拖拽,应该有感觉了捕获f
  2. 现在来配置这个job,双击第一个转换图标,打开配置窗口配置信息如下图:捕获aa
  3. 同样的方式配置第二个转换捕获aaa
  4. 配置【检查一个文件是否存在】捕获aaaa注意:FILE 一定要在kettle.properties中被定义,并且${MY_FILE}变量在job中声明
  5. 至于两个终止作业的Step里面的配置,自己随便写吧,只要自己能读懂就行。最好修改下步骤名字,不要像我一样用什么终止作业1,终止作业2.。。。的

运行这个Job

在运行之前还要配置一个地方,至于为什么这里还要这么配置,我也不是太清楚,这也是这个教程中我唯一不懂的地方,可能是因为对kettle的变量了解的不深吧,有空好好研究下kettle变量的作用域。双击上面job那个【获取文件名】然后来配置如下图所示:捕ssss获 好了现在你就可以放心的点运行按钮了。当然这里你也可以不用配置,但是在Run的时候,注意配置下位置参数,但不知道为啥配置变量却不行,现在我也搞不懂位置参数,变量,和命名参数的区别,希望有知道的朋友给我解释下,共同学习,少走弯路。  
0 0
原创粉丝点击