Kettle实现循环增量抽取数据

转载 2017年04月11日 02:24:21

数据量数以千万计时,初次一次性抽取历史数据容易出现卡死,针对这种情况可以使用循环年份抽取,并且加入增量程序使得后续抽取增量化!

整体流程:


1、获取年份极值(获取历史有数据的年份最大最小值)



获取日期:

select min(to_char(jyrq,'yyyy')) || '~' || max(to_char(jyrq,'yyyy')) YearRange from veh_is_warning where to_char(jyrq,'yyyy')>=?

2、获取时间范围(通过切分获得历史年份最大最小值)

var prevRow=previous_result.getRows();
var listv=previous_result.getRows().toString().split("~");//切分为数组
if (prevRow == null && (prevRow.size()==0))
{
false;
  
}else{
    parent_job.setVariable("startTime",listv[0].substr(2,4));//最小年份
    parent_job.setVariable("endTime", listv[1].substr(0,4));//最大年份
    
true;
}

3、检测字段值(从最小年份开始循环抽取数据)


4、获取目标表上次同步最大时间(设置目标库上次同步完的最大时间)



上次同步最大月份:

select nvl(to_char(max(tjrq),'yyyymmdd'),'19700101') maxUpdateRq from MON_FACT_UNUSUAL_WARN where tjrq<=trunc(sysdate-1)

5、检验异常预警情况统计(数据条件控制)



数据来源veh_is_warning:

select sum(1) yjs
,t.jyrq tjrq,nvl(t.jcxdh,'NA') jcxdh,nvl(t.jyjgbh,'NA') jyjgbh,
nvl(t.glbm,'NA') glbm,nvl(t.fzjg,'NA') fzjg, 
nvl(t.yjlx,'NA') yjlx,
--t.hpzl,t.hphm,d.hphm,
nvl(d.cllx,'NA') cllx
from veh_is_warning t 
left join vehicle d on t.hphm=d.hphm
where t.yjzt=1
and to_char(t.jyrq,'yyyy')='${startTime}'
and to_char(t.jyrq,'yyyymmdd')>='${P_MAXUPDATERQ}'
group by 
t.jyrq,t.jcxdh,t.jyjgbh,t.glbm,t.fzjg, 
t.yjlx,
--t.hpzl,t.hphm,d.hphm,
d.cllx

6、控制循环次数

var size = new Number(parent_job.getVariable("endTime"));
var i = new Number(parent_job.getVariable("startTime"))+1;
  
if(i<=size){
parent_job.setVariable("startTime", i);
}else
{
 parent_job.setVariable("startTime", 1);//控制退出
parent_job.setVariable("endTime", 0);//控制退出
}
 
true;

Kettle-7.0增量抽取订单数据

原文来自:http://www.ukettle.org/thread-594-1-1.html业务需求:从mysql数据库中,抽取订单和订单明细数据,做一定的轻度清洗,并将清洗后的数据存放到指定目录下...
  • zisheng_wang_DATA
  • zisheng_wang_DATA
  • 2017年05月11日 15:27
  • 1967

使用kettle进行增量抽取数据

使用背景: 当前项目中使用的数据依赖于其它系统,别人的系统当然不会把实时更新的数据一个不差的发送给我们(当然更加不会让我们对他们系统的数据库进行编程),所以我们要自己动手去获取他们系统中的数据。使用...
  • fangdengfu123
  • fangdengfu123
  • 2017年04月05日 11:02
  • 9228

Kettle循环抽取数据做增量

数据量数以千万计时,初次一次性抽取历史数据容易出现卡死,针对这种情况可以使用循环年份抽取,并且加入增量程序使得后续抽取增量化! 整体流程: 1、获取年份极值(获取历史有数据的年...
  • hzp666
  • hzp666
  • 2017年08月03日 15:44
  • 233

kettle增量抽取数据

这一章主要讲的是数据的增量抽取,以及不同数据库之间的相互抽取. 这个就是实现数据同步最基本的状态 表输入就是不管...
  • lzx6363
  • lzx6363
  • 2017年03月21日 16:11
  • 406

Kettle-7.0增量抽取订单数据

原文来自:http://www.ukettle.org/thread-594-1-1.html业务需求:从mysql数据库中,抽取订单和订单明细数据,做一定的轻度清洗,并将清洗后的数据存放到指定目录下...
  • zisheng_wang_DATA
  • zisheng_wang_DATA
  • 2017年05月11日 15:27
  • 1967

使用kettle进行增量抽取数据

使用背景: 当前项目中使用的数据依赖于其它系统,别人的系统当然不会把实时更新的数据一个不差的发送给我们(当然更加不会让我们对他们系统的数据库进行编程),所以我们要自己动手去获取他们系统中的数据。使用...
  • fangdengfu123
  • fangdengfu123
  • 2017年04月05日 11:02
  • 9228

Kettle数据抽取---增量抽取

使用KETTLE实现数据的增量抽取的方法大致如下: 从目标表中读取最大的时间戳或者增量字段ID,作为条件,然后把源表中所有大于这个增量字段的数据读出来,插入到目标表当中去; 1.打开Kettle工具,...
  • zftang
  • zftang
  • 2011年02月05日 23:16
  • 9857

Kettle:利用设置变量(时间戳)实现数据增量更新

本文整理自:http://www.2cto.com/database/201510/447072.html 要实现实时的增量更新共有两种方法: 1.通过触发器。在要抽取的表上建立需要的触发器,一...
  • AmberTian
  • AmberTian
  • 2017年05月04日 16:20
  • 3780

kettle增量方案数据同步

  • 2017年08月08日 09:32
  • 127KB
  • 下载

Data Integration Kettle 插件 增量数据加载

  • 2010年03月31日 09:51
  • 32KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Kettle实现循环增量抽取数据
举报原因:
原因补充:

(最多只允许输入30个字)