kettle循环分页导入数据

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

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

job整体流程图如下:

165435_yrsW_152736.png

详细步骤拆分:

1:设置分页变量

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

164859_ADAg_152736.png

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

164934_9dsp_152736.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;
        }

165435_yrsW_152736.png

 

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

165133_QqA6_152736.png

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

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

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

转载于:https://my.oschina.net/jgy/blog/908272

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值