Kettle使用脚本实现循环(十)

10 篇文章 6 订阅

kettle中没有循环的控件,我们可以使用JavaScript脚本来实现这个功能

案例:

从一个接口中获取数据,然后使用循环一条一条的插入数据库中

流程

在这里插入图片描述
从接口中获取数据可以参考https://blog.csdn.net/BushQiang/article/details/90049200

返回的接口数据

在这里插入图片描述

循环初始判断

var prevRow=previous_result.getRows();//获取上一个传递的结果
var i=new Number(0);//循环初始变量控制
if(prevRow == null && (prevRow.size()=0))
{
	false;//返回结果
} else {
    parent_job.setVariable("i", i);//循环初始值设置
    parent_job.setVariable("size", prevRow.size());//循环总数量
    parent_job.setVariable("name", prevRow.get(i).getString("name", ""));//获取第几条数据的值
	parent_job.setVariable("province", prevRow.get(i).getString("province", ""));
    parent_job.setVariable("uid", prevRow.get(i).getString("uid", ""));
    parent_job.setVariable("city", prevRow.get(i).getString("city", ""));
	true;//返回结果
}

检验字段的值

在这里插入图片描述

获取一条数据并插入数据库中

使用获取变量来获取数据,字段选择可以选择你需要的数据
在这里插入图片描述

循环控制

根据i获取数据,并加1

var prevRow=previous_result.getRows();//获取上一个传递的结果
var i=new Number(parent_job.getVariable("i"));//获取循环变量
var size=new Number(parent_job.getVariable("size"));//循环总数
if(i<size) {
    parent_job.setVariable("name", prevRow.get(i).getString("name", ""));
	parent_job.setVariable("province", prevRow.get(i).getString("province", ""));
    parent_job.setVariable("uid", prevRow.get(i).getString("uid", ""));
    parent_job.setVariable("city", prevRow.get(i).getString("city", ""));
}
parent_job.setVariable("i", i+1);//变量加1
true;

然后再检验字段的值比较i与size的值,判断循环是否结束,这个最后插入数据库中的数据。
在这里插入图片描述
涉及学习案例以及教程:https://download.csdn.net/download/BushQiang/20733934

Kettle实现循环有两种方式。一种是通过在Job中引用Transformation时,设置Transformation的高级属性来实现循环。具体可以通过设置Transformation的高级属性"执行每一个输入行"来实现循环。另一种方式是通过在Job中使用"Evaluating JavaScript"和"校验字段的值"两个控件来实现循环。具体实现方式可以参考文档中的链接。 在Kettle实现循环主要涉及循环变量的初始化、判断条件和计数器的累加。例如,可以通过从表中或文本中读取每一行数据进行循环。初始化参数部分可以使用JS脚本来获取前一个转换传递的值。可以使用"previous_result.getRows()"来获取上一个转换传递的结果,即数据库查询结果集或文本结果集对象。判断结果集的数量是否为0,如果为0则返回false,否则进行变量的初始化,例如存储表名变量、执行表的总数量和循环控制变量等。 总的来说,Kettle可以通过设置Transformation的高级属性或使用JavaScript脚本实现循环。具体实现方式可以根据具体的需求和场景选择合适的方法来实现循环。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Kettle实现循环的两种方法](https://blog.csdn.net/gladmustang/article/details/41819367)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [kettle中如何实现循环](https://blog.csdn.net/hcq_lxq/article/details/120079963)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

原飞木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值