kettle循环解决连接oracle数据库报错Connection reset

第二种循环源文件下载:connection_reset.rar

介绍两种循环方式,一种是官方自带例子,通过job组件执行每一行来循环,第二种通过javaScript脚本组件循环,同时可以解决接oracle数据库报错Connection reset的问题

1.kettle8官方案例

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

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

包含文件和作用:

流程控制总job

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

组件1:get list of tables

自带数据库连接

组件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上需要勾选执行每一条数据,这点就是循环的关键

transformation(转换):Define TABLE variable

组件1:get one tablename

组件2:set ${TABLENAME}

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

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

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

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

输出结果为:

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

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

 

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

这个例子是自己写的,主要功能是连接oracle数据库时发生 'Connection reset by peer' or 'Connection reset'  的错误

作业如下:

其中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给js脚本组件,js脚本组件往红色线执行
    false;

}else{
    //当前循环次数加1
    count = parseInt(count) + 1;
    //替换jvm中的循环次数
    parent_job.setVariable("EP_V_ID", count);
    //返回true给js脚本组件,js脚本组件往绿色线执行
    true;

}

 

相当于如下循环:

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

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

if(i==5) break;

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

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值