知识库 : 使用iUAP DI进行基于快照的变更数据捕捉(CDC)

Edit Document

使用 iUAP DI 进行基于快照的变更数据捕捉( CDC )

如果 源表没有时间戳 , 没不能用触发器,就要用快照表了,通过比对获得数据的变化。快照 表 就是一次性抽取系统中全部数据,把这些数据加载到数据仓库的缓冲区中。下一次 需要 同步时, 再 从源系统中抽取全部数据,并把全部数据也放到数据仓库的缓冲区中,作为这个表的第二个版本,然后再比较这两个版本的数据,找到变化。 例如 ,两列的表,列名是 ID 和 Color 。这个表的两个版本如下 图 :

快照 1

ID

COLOR

1

Black

2

Green

3

Red

4

Blu

 

快照 2

ID

COLOR

1

Grey

2

Green

4

Blu

5

Yellow

有 很多方法可以获取这两个版本数据的差异。第一个 办法就是 在主键 ID 上做外连接并根据字段的比较结果增加一个标志字段( I 表示插入, U 表示 更新 , D 表示删除, N 表示 没有变化),另外过滤掉没有变化的记录。

SELECT * FROM

( SELECT CASE WHEN T2.ID IS NULL THEN 'D'

             WHEN T1.ID IS NULL THEN 'I'

             WHEN T1.COLOR <> T2.COLOR THEN 'U'

             ELSE 'N'

        END AS FLAG

,       CASE WHEN T2.ID IS NULL THEN T1.ID

             ELSE T2.ID

        END AS ID

,       T2.COLOR

FROM SNAPSHOT_1 T1 FULL OUTER JOIN SNAPSHOT_2 T2 ON T1.ID = T2.ID) A

WHERE FLAG <> 'N'

结果 如下表:

F lag

ID

COLOR

U

1

Grey

D

3

NULL

I

5

Yellow

在 iUAP DI 中也可以 比较表之间的差异 , 并增加一个标志字段表示 I , U , D 的变化 , 使用记录比对,就可以做同样的工作 。设置 如下 图 :

 

对比后 的预览 结果 如下:

ID

COLOR

F lag

1

Grey

changed

2

Green

identical

3

Red

deleted

4

Blu

identical

5

Yellow

new

可以 根据 Flag 的值 ,利用 switch/case 对 Flag 进行分流,进而对目标进行 记录 的删除 、 更新 和 插入。 完整 ETL 过程 见 附件。

在实际 应用中,快照表 一般不允许 建立在源 数据库 端 和数据仓库中, 最好建立一个缓冲数据库保存快照数据 。

基于 快照的 CDC 可以 检测 插入 、 更新和删除的数据,这是其优点,缺点是需要 大量 的存储空间来保存快照数据,另外数据 量 比较大 时 ,有严重的性能问题 。 使用 数据 库的比较相对 ETL 引擎 的性能 要 高, 有时 可以尝试第一种方法。

 

基于快照的增量更新.aedi

Attachments:

使用iUAP DI进行基于快照的变更数据捕捉.docx (application/vnd.openxmlformats-officedocument.wordprocessingml.document)
使用iUAP DI进行基于快照的变更数据捕捉.docx (application/vnd.openxmlformats-officedocument.wordprocessingml.document)
使用iUAP DI进行基于快照的变更数据捕捉.docx (application/vnd.openxmlformats-officedocument.wordprocessingml.document)
使用iUAP DI进行基于快照的变更数据捕捉.docx (application/vnd.openxmlformats-officedocument.wordprocessingml.document)
基于快照的增量更新.aedi (application/x-upload-data)