要实现实时的增量更新共有两种方法:
1.通过触发器。在要抽取的表上建立需要的触发器,一般要建立插入、修改、删除三个触发器,每当源表中的数据发生变化,就被相应的触发器将变化的数据写入一个临时 表,抽取线程从临时表中抽取数据,临时表中抽取过的数据被标记或删除。触发器方式的优点是数据抽取的性能较高,缺点是要求业务表建立触发器,对业务系统有 一定的影响。
2.通过时间戳。我是在两边数据库的表里插入了一列(用来取数据变动时的时间),然后做个计划任务,设置每隔多少时间跑一次kettle,就行了。要实现“实时”,就只能把时间间隔设小一点。
任务 :利用kettle工具,通过时间戳完成某表实时的增量更新。
利用模块完成即可,如下简图:
先手工准备一个实验环境:
准备基本完成如下效果:
select t.*, t.rowid from EMP_ETL t
编写时间戳ktr转换过程,把原表中最大的hiredate作为变量,如下图:
下面在“表输入”环节中,使用传递过来的${MAXSJ}作为条件,完成向目标表插入数据,简要流程如下:
执行转换,完成数据插入,简图如下:
总结:对于使用时间戳的方式来完成增量时,这个实验中的方法如果每次都是全表max,当数据量特别大时,效率将大打折扣。而此时,我们就需要添加一个时间戳记录表,另添加一个时间戳字段,每次抽取结束后,将每次抽取后最晚一条记录的时间戳时间记录到时间戳表中,然后每次查询起点时间时只需要从时间戳表中提取即可。