【Kettle】数据整合之基于时间戳的变更数据捕获模型

一、数据整合业务场景

    1.1 背景

        ETL过程的第一步就是从不同的数据源抽取数据并把数据存储在数据缓存区。这个过程的主要问题就是初始加载的数据量大和比较慢的网络延迟。因此在数据初始化加载完成后,不能再把所有的数据重新加载一遍,需要只抽取变化的数据。

        因此,很重要的一点是如何识别出变化的数据并且只抽取这些变化的数据,即针对变更数据进行捕获(Change Data Capture),简称CDC。

        CDC基本上可以分为两种,一种是侵入性的,另一种是非侵入性的。只要CDC执行的操作可能会给源系统带来性能上的影响,也就是说,只要CDC操作中执行了SQL语句(无论以何种方式),那么就可以认为这种CDC是侵入性的。

        CDC有四种方法,分别为:①基于源数据的CDC     (基于时间戳的CDC和基于序列的CDC)②基于触发器的CDC③基于快照的CDC④基于日志的CDC;其中除了基于日志的CDC属于非侵入性的CDC外,其余均属于侵入性的CDC。

    1.2 目标及思路

        使用基于时间戳的CDC来进行增量数据的捕获,完成数据的抽取、清洗、转换以及加载的过程。

        基于源数据的CDC要求源数据中有相关的属性列,通过ETL过程中利用这些属性列来判断识别哪些数据是增量数据。

        例如在使用基于时间戳的CDC时,(时间戳 【日期-时间值】)要求在源数据中至少有一个更新时间戳,但实际上最好有两个时间戳:一个插入时间戳(记录什么时候创建的)和一个更新时间戳(记录什么时间最后一次更新的)

    1.3 优缺点

        基于时间戳的CDC方法是CDC中最简单的实现方式,也是最常用的方法。

        但是其缺点也非常明显:

            ①区分插入操作和更新操作:只有当源系统中包含了插入时间戳和更新时间戳两个时间字段时,才能够区分插入和更新操作,否则无法区分。

            ②删除记录的操作:不能够捕获删除操作,即无法捕捉到物理删除操作,除非是逻辑删除,即记录并没有真正物理删除,而只是做了逻辑上的标志,例如标记删除的数据的字段SCBZ,当SCBZ=1时认为删除,反之未删除。

            ③多次更新监测:如果在一次同步周期内,数据被更新了多次,那么只能同步到最后一次的更新操作,中间的更新操作实际上已经丢失,未捕获到。

            ④实时能力:基于时间戳的数据抽取一般只适用于批量操作,不适合实时场景下的数据加载。

    1.3 工具及组件

        工具:IDI(基于Kettle二次开发的ETL工具)

        组件:①转换:输入组件、输出组件等

                  ②作业:通用组件

二、数据结构设计思路

待填充

三、数据整合设计思路

    3.1 作业调度设计思路

    3.2 转换抽取设计思路

        3.2.1 捕获时间变量

        3.2.2 数据清洗整合

四、数据整合解决方案

    4.1 作业调度模型

        4.1.1 作业调度流程

        4.1.2 作业模型解析

    4.2 整合转换模型

        4.2.1 整合转换流程

        4.2.2 整合转换流程解析

五、其他说明

    暂无。

猜你喜欢

转载自www.cnblogs.com/badian/p/9320590.html