在平时的操作过程中可能大家需要经常进行增量的数据抽取,方法有很多种,接下来几天讲给大家介绍几种我本人经常使用的几种方式;

首先给大家介绍我最喜欢的一种,就是通过标志位;

操纵方法如下,在源表中增加一个标识字段,比如tongbu,当然可以为它设个默认值N,然后我们再增加一个索引nvl(tongbu,‘N’),增加索引是为了提高查询的速度,接下来我们来写具体的流程;

kettle抽取es数据 kettle怎么抽取数据_sql


我写的这个流程非常简单,有的朋友们会非常疑惑为什么我会有更新组件,先卖个关子咱们继续;

在写 表输入中的sql时,我们引入了一个伪列gx,并赋值Y,这有什么有呢,继续看;

kettle抽取es数据 kettle怎么抽取数据_字段_02


大家可以看到我在表输入的sql中特意框起来两块,where条件后面的就用到了我们之前建的索引,这个语句的逻辑解释为当tongbu这个字段的值为空或者为N的时候我们认为这些数据是未同步到目标表的;

当原表中的数据同步到目标表之后我们回头将伪列gx的值(Y)赋给这条数据的标志位tongbu,那么这时tongbu的值就变成了Y,此时我们就认为这条数据已经同步到目标标了,在下一个执行计划中就不会继续同步它;如图

kettle抽取es数据 kettle怎么抽取数据_伪列_03

这种方法的好处是非常直观,你可以通过标志位可以很清楚的知道这条数据有没有同步,特别是需要频繁同步的时候;
当然缺点也是很明显的,会对原表造成一定的压力,并且速度可能会收到一定的影响;

如果有什么迷糊,可以给我留言(这种方法理解起来稍微有一点点压力);
其实一句话:根据状态为确定有没有同步,没同步的同步后修改状态位;


转载于:https://blog.51cto.com/13602563/2163559