【Kettle】kettle循环遍历数据库中的表,并进行SQL操作

背景:通过kettle循环遍历数据中的所有的表,并且对每张表执行转换

效果预览:
在这里插入图片描述

获取表名【转换】:
在这里插入图片描述

初始化循环条件【JavaScript脚本】:
在这里插入图片描述

// 获取上一个传递的结果
var prevRow=previous_result.getRows();
// 空值判断
if (prevRow == null || prevRow.size()==0)
{
    false;

}else{
    parent_job.setVariable("tablenames", prevRow); // ArrayList 存储表名变量,以数组形式保存入 tablenames
    parent_job.setVariable("size", prevRow.size()); // 主要是用来确认循环的总次数
    parent_job.setVariable("i", 0); // 初始化循环控制变量 i

    // prevRow.get(0).getString("tablenames","") 表示获取 tablenames[0],并设置给变量 TABLENAME
    parent_job.setVariable("TABLENAME",prevRow.get(0).getString("tablenames",""));
    true;
}

判断循环是否结束【检验字段的值】:
在这里插入图片描述

判断表中是否有可操作数据【计算表中记录数】:
在这里插入图片描述

插入新旧ID到中间表【转换】:
在这里插入图片描述

更新循环条件【JavaScript脚本】:
在这里插入图片描述

// 获取 tablename,并转换成数组
var list_Tables =parent_job.getVariable("tablenames").replace("[","").replace("]","").split(",");
// 获取总的循环次数('获取表名'的结果集总数)
var size = new Number(parent_job.getVariable("size"));
// i++
var i = new Number(parent_job.getVariable("i"))+1;
// 判断循环是否结束,此处必须加对 i 的判断,因为最后一次循环会因 i 值会导致数组下标越界
if(i<size){
    parent_job.setVariable("TABLENAME", list_Tables[i]);
}
// 更新i
parent_job.setVariable("i",i);
true;
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值