Kettle实现Transformation 循环及跳出

浏览: 3323

在ETL操作中,经常需要对某个操作进行循环调用,可是使用Kettle工具时,并没有循环的组件可以调用,但在Job中引用Transformation时,可通过设置Transformation 的高级属性(”执行每一个输入行”)来实现Transformation 的循环,而在Transformation执行过程中,可根据条件设置跳出循环,或者略过本次操作,进入下一次循环。

循环配置步骤如下:

说明:

本例中将涉及两个Transformation 和一个Job。

Get FileNames【Transformation 】:通过此Transformation 获取固定目录下(D:\test)的sql文件全路径名称

Output FileNames【Transformation 】:通过此Transformation 将上一步骤获得的每个sql文件名写入files_output.txt文本。

Output FileNames_Loop【Job】:此Job调用Get FileNames和Output FileNames,实现Output FileNames的循环调用。

  1. 先设置循环的For loop点。

    Get FileNames的配置如下图,注意通配符设置:



  2. 设置循环的操作主体

    先引用上一步的结果记录,引用的是filename这个全路径文件名



    对于Modified Java Script Value这个步骤,设置的是当文件名大于”D:\test\dm.sql“时,是跳出循环,还是略过本次,进入下一次循环。

    Modified Java Script Value配置的脚本如下:

trans_Status = CONTINUE_TRANSFORMATION;

//调试

//Alert(filename.getString());

//注意“\”需要加转义符“\”

if(filename.getString().compareTo(“D:\\test\\dm.sql”)>0) {

//条件满足时,跳出循环

    trans_Status = ERROR_TRANSFORMATION;

}

如果要设置为满足条件时,略过本次而进入下一次循环,可修改红色字体部分为SKIP_TRANSFORMATION

文件输出的配置如下:



  1. 两个Transformation 完成后,新建一个Job:Output FileNames_Loop:


    注意Output FileNames【Transformation 】的高级属性中,勾上”执行每一个输入行”。


    保存后,执行进行调试即可。

推荐 0
本文由 newkoa 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册