您的位置:首页 > 其它

【kettle 7.1】再次体验

2018-03-06 00:00 162 查看

1 前言

<kettle 初体验> 中,我们新建了一个 转换 ,做了一个任务:从CSV文件中读取数据,并加入问候的信息,并输出到XML文件中,在本文中,我们将在前一篇文章的基础上,新建一个job,并完成下面的任务:

1、新建两个 转换 ,第一个转换的工作是 从输入变量中获取 需要转换的文件名 (这里是CSV文件),并输出到环境变量 MY_FILE 中;另一个转换的任务是从环境变量中拼接CSV文件的路径,该文件作为转换的输入,并加入问候的信息,并输出到XML文件。可以看到,其实第二个转换是由上一篇文章进行修改而成的。

2、新建一个job,该job如下所示。该job由两个 transformation 组成,分别对应上面所述的两个转换。除了这两个转换外,还连接了两个中断和一个文件存在的判断条件。当第一个转换遇到异常抛出时,将会走 abort job,成功时将会往下执行;此时将会通过一个判断条件,该条件根据从上面获取到的变量拼接的字符串,判断该文件是否存在,如果不存在将会流转到abort job2,否则将会流转到 transformation 2 中,进行转换2的任务。



由于kettle只做了部分的汉化处理,为了更好的对照教程学习,这里把kettle软件的语言设置为english

2 完成目标

为了完成上面设定的目标,我们需要做一些准备工作。

(1)在存储路径下新建文件夹,并在spoon中新建一个job,并保存该job在新建的文件夹中。笔者所命名的文件如下:



job的文件扩展名是kjb。

(2)新建好job后,我们设置两个环境变量,一个是FILES_PATH,另一个是MY_FILE,前一个变量是指定文件存放路径,后一个是存储文件名的变量





2.1 设置转换:获取输入,设置为环境变量



新建转换:get_file_name.ktr

从左边窗口中拉下面的step到工作台,并按照上面的图进行连接。

(a)input -> Get System Info

(b)Flow -> Filter rows

(c)Flow -> Abort

(d)Job -> Set Variables

这里的打勾的连接意思是当上面的step执行的结果为true时,走该流程。上面整个转换过程的意思是:获取系统输入的第一个参数,并判断输入是否有值,如果没有就流转到abort这个step,并抛出异常。

设置 Get System Info 步骤

双击 Get System Info 步骤,设置值域为my_file,类型设置为从命令行的第一个参数中获取。



设置filter row步骤



设置判断条件为 my_file 变量不为空

设置Abort步骤



记得勾选 "abort with error" ,否则在job中嵌入该转换,进行流程流转时是永远都为true,也就是肯定会继续往下执行。

设置Set Variables步骤



这里把my_file的变量设置到环境变量 MY_FILE 中。

2.2 设置转换:读取CSV文件数据,输出到XML中

新建另一个转换:hello_with_param.ktr。该转换可以参考上一篇文章<kettle 初体验> 和下面的图示。



和前文有所区别的地方是:

(1)CSV file input 的文件名是使用环境变量拼接得到的



通过 ctrl+alt + 空格 可以选择设置好的环境变量。

(2)XML output 的文件输出路径也是通过环境变量得到的



2.3 设置job

(1)在Transformation step中选择前面保存的转换get_file_name.ktr

(2)abort job,设置报错日志消息 “没有获取到文件名”

(3)file exists,设置需要判断的文件,这里使用环境变量



(4)Abort job 2,设置报错消息“文件 ${FILES_PATH}/${MY_FILE} 不存在”

(5)Transformation 2,选择转换 hello_with_param.ktr

3 测试和执行

添加命令行参数,我这里需要测试的文件名为customer_list.csv



执行后,可以在底下看到每个step的执行状况



如果在命令行参数的赋值有问题,整个流程是不能跑通的,此时会发生某个abort,下面是在没有任何输入的情况下,报没有文件输入,这是在前面部署的step判断条件的流转情况
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Kettle ETL