状态类无删除表的拉链算法原理及退链操作

状态类无删除表的拉链算法原理及退链操作

 

算法原理

2211算法,是从技术缓冲层向近源模型层加载状态类无删除表的常规拉链算法。

以下面这两条数据为例,第二个字段ACCT_NUM(账号)是主键,假设现在跑批进行到2020/10/16了(即TX_DATE为2020/10/16)

 

 

可以看出主键ACCT_NUM为612401395数据的历史变化:

1.

2020/09/30 ——诞生第一条数据,这时我们还不知道它的状态持续到什么时候,于是假设持续到3000/12/31,这条数据处于开链状态

 

2.

2020/10/10 ——数据发生变动了,于是把这条数据“闭链”,END_DT更新为2020/10/10,表示2020/09/30-2020/10/10期间,数据是稳定不变的状态。

 

3

因为数据在2020/10/10发生了变化,有了新的状态,所以新增一条状态,开始时间就是数据发生变动的时间2020/10/10,而且持续到现在2020/10/16还是这种状态,我们也不知道它什么时候还会变动,于是同样假设了一个无限久远的日期(3000/12/31)

 

 

退链

现在,我们要把这个表退链到2020/10/09未加载状态(也就是2020/10/08加载完成后的状态),要把从2020/10/09开始新增的数据删掉,操作流程如下:

1.删掉2020/10/08之后新增的数据

delete from odb. SCO ZDM DTEXTR MDMDS INFO bak where START_DT>date'2020-10-08';

删掉后可以查一下表:

确实删掉了START_DT>date'2020-10-08’的数据

 

2.

把截止到2020/10/08最后一条数据“开链”

update odb. SCO_ZDM_DTEXTR_MDMDS_INFO_bak set END_DT=date'3000-12-31' where END_DT>date'2020-10-08';

操作后查下表:

END_DT已经变为3000/12/31

 

这时,数据就退链到了TX_DATE等于2020/10/09未加载状态(也就是ODB已经加载到TX_DATE=2020/10/08),由于这条数据是TX_DATE=2020/10/10才发生变化的,所以,数据状态实际和它刚诞生时是一样的。

posted @ 2020-10-19 17:56  向日葵的跋涉  阅读(520)  评论(0)    收藏  举报