kettle之提取增量数据

参考网址:https://ask.hellobi.com/blog/yuguiyang1990/7023
看到这个博主的文章,就打算把这个过程复现一下
表结构和数据:
-- 源表:tm_book

image.png

数据
image.png

-- 中间表:staging_tm_book
image.png

该表为空
-- 目标表 ods_tm_book
image.png

数据
image.png

--配置表:tm_etl_table


image.png

其中:is_run表示是否更新


image.png

这边只是为了练习,数据量都很小
整体思路如下:
1、从配置表tm_etl_table中找出目标表 ods_tm_book的最新更新时间D1;
2、如果源表tm_book中的最新时间D2>D1,表示源表中有数据更新或者插入,这部分数据先存入中间表staging_tm_book;
3、通过主键id,关联中间表staging_tm_book和目标表ods_tm_book,将目标表中的该条记录做更新;
4、最后更新配置表中表 ods_tm_book的is_run字段为1,update_time为最新的时间
--找出目标表 ods_tm_book的最新更新时间,设别名为uptime
首先将tm_etl_table中的is_run字段设为0


image.png

得到最近的更新时间


image.png

--将uptime作为变量传入,得到更新时间大于uptime的数据
image.png

将这部分数据存入中间表
image.png

--更新目标表中和配置表
分成3步:
1)删除目标表中id与中间表中id有重合的数据;
2)将中间表数据插入目标表;
3)更新配置表中的两个字段
image.png

最终结果显示:
目标表ods_tm_book
原来的数据为


image.png

更新为
image.png

id等于2的记录被更新
配置表tm_etl_table现在为
image.png

另外一种不用中间表的方法,利用kettle控件插入/更新:
image.png

结果一样,但是这个控件据说当数据量大的时候,速度很慢,还没试过大数据量的,等试过了再补充吧。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容