知识库 : 使用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)