【Kettle】Kettle增量抽取模型

【Kettle】Kettle增量抽取模型

在日常的ETL过程中,常会使用用增量抽取数据,有一个简单,通用的增量抽取模型,便可以开发效率,并统一开发规范,该模型是基于时间戳的增量方式,并且有etl_logs记录抽取情况,并且具有一定的容错性。

一,抽取日志表

表字段
Id:表ID
tableName:表名
min_date:最小更新时间,初始值 1980-01-01 00:00:00
max_date:最大更新时间,初始值 1980-01-01 00:00:00
status:更新状态,0-初始化,1-更新中,2-错误,3-完成
etl_date:etl开始时间
etl_date_end:etl结束时间
is_del:删除标记,0-正常,1-删除
threads:执行sql的进程数,0-没执行sql,1-正在执行etl的sql
sql_text:获取最大更新时间的sql
注意:
如果表中用于增量更新的字段为update_date,则sql_text为表名。
如果表中的增量字段不为update_date,则sql_text为(select 增量字段 as update_date from tablename) t)

二,抽取过程

1,主流程
在这里插入图片描述
save_etl_logs:将etl_logs将日志表中的数据插入到日志历史记录表中
sql_init_etl:整个etl同步的初始化,初始化对象:status 为 0 或 3,且is_del = 0
更新内容如下sql。

update etl_logs
set min_date = max_date,
    etl_date = sysdate,
    etl_date_end = null
where status in ('0','3') and is_del = 0

2,get_etl_maxdate_job
该job主要是为了获取最大的更新时间,其关键就在于etl_logs中的sql_text
主流程
在这里插入图片描述
转换:get_maxdate_from_logs 主要是从日志表中获取ID,SQL_TEXT,用于获取最大的更新时间。
在这里插入图片描述

SELECT id, sql_text
FROM etl_logs 
WHERE status in('0','2','3')

作业:get_maxdate_job,通过sql_text获取最大更新时间,并更新到日志表中。
在这里插入图片描述
转换:get_variables,从结果集中获取ID,sql_text,并设置变量
在这里插入图片描述
转换:get_maxdate_tran,更新最大更新时间
在这里插入图片描述
中间的表输入sql,注意勾选替换变量

select ${id},as xid
       nvl(max(update_date).to_date('1980-01-01 00:00:00','yyyy-mm-dd HH24:mi:ss')) as maxdate,
       '1' as status
       from ${sql_text}

3,etl_main_job
用于实现业务数据的抽取更新。
主流程
在这里插入图片描述(1),设置表id。
(2),获取当前当前执行sql的进程,如果大于等于1,则有SQL在执行中,如果小于1,则thread+1,开始执行表插入更新。
(3),判断插入/更新是否完成,并更新执行的状态。

转换:get_threads,获取执行SQL的thread
在这里插入图片描述
SQL_update_thread

update etl_logs
set thread = thread+1
where id = ${id}

转换:tran_xxxx_update,表的插入/更新
在这里插入图片描述
注意表输入的条件,增量字段的时间范围

后面更新结果的SQL,3-成功,2-失败,并且更新thread,以及接受时间。

update etl_logs
set status = '3',
    etl_date_end = sysdate,
    thread = thread-1
where id = ${id}

整个模型就是这样,由于涉及的过程比较多,刚开始搭建可能会报错,所以需要自己在根据实际情况调整。如有不对,可以拍砖指出。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值