kettle mysql 分页_kettle循环分页导入数据

本文介绍了如何使用ETL工具Kettle进行分页导入大量MySQL数据,以避免内存溢出错误。通过设置分页变量,用JS脚本判断分页条件,并在每个转换中使用Limit来实现数据分批导入。详细步骤包括设置分页变量、编写JS脚本和使用表输入输出的Limit功能。这是一个循环分页的数据抽取和导入解决方案。
摘要由CSDN通过智能技术生成

在使用ETL工具kettle做数据导入的时候,如果数据量比较大,如果不使用分页导入数据,因为一次性加载数据量太大,会导致内存溢出错误,所以使用适当的分页,可以避免此错误的出现。

实现的思路是,先把分页的初始条件设置为变量, 然后判断分页条件是否符合,如果不符合,则直接退出,如果符合,则继续导入,本次导入完成之后,执行控操纵,然后再次到分页条件判断,一词进行,直到最后一页导入完成。下次判断就会返回false,直接跳到成功步骤。

job整体流程图如下:

abd25aa70fef980f07c09d8c3b0c699e.png

详细步骤拆分:

1:设置分页变量

在第一个转换中设置两个命名参数:

2a2d9dabe388c3e232acf3f9095d0ff6.png

把参数设置成变量,也是job里面的第1个转换的流程只设置变量即可。

ab8b3931e3cd86b50e44918ea0e2f353.png

使用JS脚本校验分页条件是否满足(具体代码如下):

parent_job.getVariable("CURR_PAGE");//job中获取变量方法

parent_job.setVariable("TOTAL_PAGE",total_page);//job中设置变量方法

var currPage = parent_job.getVariable("CURR_PAGE");// 从job获取当前页数值(当前第几页)

var total_count = parseInt(parent_job.getVariable("TOTAL_COUNT")); // 从job中获取本次导入的总条数

var page_size = parseInt(parent_job.getVariable("PAGE_SIZE")); // 分页条数

var total_page = parent_job.getVariable("TOTAL_PAGE"); // 本次导入的总分页数

if(total_page == null || total_page == undefined || total_page == ""){

total_page = total_count / page_size;

if(total_count % page_size > 0){

++total_page

}

parent_job.setVariable("TOTAL_PAGE",total_page);

}else{

total_page = parseInt(total_page);

}

if(currPage == null || currPage == undefined || currPage == ""){

currPage = 1;

}else{

currPage = parseInt(currPage);

}

if(currPage > total_page){

false;

}else{

var start = (currPage -1 ) * page_size;

parent_job.setVariable("START_ROW",start);

parent_job.setVariable("CURR_PAGE",currPage+1);

true;

}

abd25aa70fef980f07c09d8c3b0c699e.png

最后第2个转换流程如下:表输入输出使用limit分页如下图:

fd351b11c55264ba328ea0dffcd54264.png

要替换sql中变量需要勾选下面一条:替换sql语句里的变量。

到这里,一个循环分页的数据抽取导入的job就完成了,本文 只是作者在使用中的一次可行性尝试,如有不正确还请留言讨论。

参考链接:http://blog.csdn.net/butioy_org/article/details/54972836

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值