kettle循环

介绍两种循环方式,一种是官方自带例子,通过job组件执行每一行来循环,第二种通过javaScript脚本组件循环

1.kettle8官方案例

文件位置:$KETTLE_HOME/samples/jobs/process all tables

这个例子是先获取数据库中的所有表名,统计表格表的数据条数,最后输出到txt上

包含文件和作用:

kettle循环_第1张图片

流程控制总job

kettle循环_第2张图片

transformation(转换):Get list of tables as result

kettle循环_第3张图片

组件1:get list of tables

kettle循环_第4张图片

自带数据库连接

kettle循环_第5张图片

组件2:Concat Fields

把TABLE_SCHEMA字段和TABLE_NAME拼接成一个字段TABLE_SCHEMA_NAME,分隔符为英文句号

组件3:tables.txt

查询出来的表名称TABLE_NAME输出到txt

输出的文件路径,可以把鼠标移动到上面就会显示

组件4:Select values

只选择一个字段TABLE_SCHEMA_NAME并且重命名成tablename

组件5:Copy rows to result

把表名称复制到结果集上,在下一个transformaton里面可以使用Get rows from result获取到结果集

Job(作业):Process a table 

前面一个transformation获取到5条数据,数据到Process a table 这个job上需要勾选执行每一条数据,这点就是循环的关键

kettle循环_第6张图片

kettle循环_第7张图片

transformation(转换):Define TABLE variable

kettle循环_第8张图片

组件1:get one tablename

kettle循环_第9张图片

组件2:set ${TABLENAME}

kettle循环_第10张图片

transformation(转换):Get amount of rows from table

kettle循环_第11张图片

组件1:Number of rows in ${TABLENAME}

kettle循环_第12张图片

组件2:rows-${TABLENAME}.txt

查询到一个结果输出到一个txt上,文件名为${java.io.tmpdir}/rows-${TABLENAME}

输出结果为:

kettle循环_第13张图片

transformation(转换):save list of all result files

把输出的txt合并成一个,该例子有点问题需要修改一下才行,做循环的话这部分可以忽略

 

2.通过job step里的JavaSrcipt 组件构建循环

这个例子是自己写的,主要功能是连接oracle数据库时由于网络原因或者数据库配置不正确发生 'Connection reset by peer' or 'Connection reset'  的错误,或者是kettle、jdbc的bug,尝试重新连接后正常访问

相当与循环

for(int i=0;i++){

if(数据库连接成功)  break;

if(i==5) break;

print("数据库连接信息")

}

js代码:

var count;
var count_max;

count = parent_job.getVariable("EP_V_ID");
count_max = parent_job.getVariable("EP_V_MAX_ID");

if(count == count_max){

    false;

}else{

    count = parseInt(count) + 1;

    parent_job.setVariable("EP_V_ID", count);

    true;

}

 

kettle循环_第14张图片

判断和出口使用javascript脚本,js脚本返回false走红线,返回true走绿线

这种方式也可以循环便利数组,js中数组的使用方法具体的可以参考官网上的js脚本说明

你可能感兴趣的:(Kettle,kettle循环,kettle8)