Kettle 中的循环

Posted fooobabar

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kettle 中的循环相关的知识,希望对你有一定的参考价值。

说道循环,小伙伴们肯定不陌生,就是重复干一件事;而kettle中的循环一般是发生在job中,因为job是串行执行的;

kettle的循环有两种,一种是通过js脚本,另外一种是通过遍历前面步骤返回的每一行。


下面是我写的伪代码,我将使用Kettle来实现这段代码:

array = [‘sys1‘,‘sys2‘,‘sys3‘,‘sys4‘]

for variable in array:
     if variable == ‘sys1‘ :
         print(‘%s被调用‘%(variable,))
        
     elif variable == ‘sys2‘ :
         print(‘%s被调用‘%(variable,))
    
     elif variable == ‘sys3‘ :
         print(‘%s被调用‘%(variable,))
    
     elif variable == ‘sys4‘ :
         print(‘%s被调用‘%(variable,))
    
     else :
         print(‘没有被调用‘)


代码里循环变量是variable,用for遍历完整个数组,则表示循环结束。

循环体中有一组判断条件,判断数组中的元素归于哪一个分支。

如果所有判断条件都不符合,则打印“没有被调用”


1. Kettle作业介绍

schedule_job.kjb : 用来关联循环变量和循环体的作业,也是调用的入口,可以理解main

get_data_from_datagrid.ktr : 生成数组,也就是循环条件。

cycle_body_job.kjb : 循环体,数组里有几条数据,循环体就执行几次。


2. 下图是 schedule_job 的结构,它的作用是连接循环条件和循环体,所以这个作业中包含其他两个步骤

技术图片


接下来我会展开每个步骤里的设置方法,最后再介绍schedule_job 是如何设置的;

如果展开的是文件,则直接写文件名,如果展开的是步骤,则带上文件名-步骤名称。

例如 展开文件 get_data_from_datagrid.ktr

       展开步骤 get_data_from_datagrid-Data Grid


3. get_data_from_datagrid.ktr 展开

技术图片


只有两个步骤,一个是data grid,用来生成数组,另外一个步骤是Copy rows to result ,用来把返回的数据复制到结果中,可以返回给调用者。调用者就是外面的schedule_job.ktr。


4. get_data_from_datagrid-Data Grid 展开

技术图片

在Meta选项卡中填写字段信息, 字段名是SYSTEMNAME 类型是字符串

技术图片

在Data选项卡里填写字段的值,这个过程就好像往excel里填数据一样。


5. cycle_body_job.kjb 展开

技术图片


双击空白的地方,打开“Parameters”选项卡, 在里面输入变量名SYSTEMNAME。这个变量跟前面的步骤中字段名相同。

技术图片


6. cycle_body_job-is_sys1 展开

其他判断条件类似,不一一展开。

技术图片


7. schedule_job 设置方法

技术图片


勾选“Execute every input row”

技术图片


技术图片

以上是关于Kettle 中的循环的主要内容,如果未能解决你的问题,请参考以下文章

kettle循环创建Oracle不存在的表

kettle之参数和变量

kettle作业 循环执行并行执行作业

kettle庖丁解牛第34篇之常用转换组件之Add XML

kettle中的表输入怎样设置参数

限制 Kettle 的 mongodb 输入中的行数