赞
踩
拉链表
------------------------------------
SRC元数据表
TAG拉链表
T_NEW用于存放转换、处理后的数据
T_INC用于存放比对出的增量数据
'29991231'即未结束的(或称未关链的)
------------------------------------
-----------
算法详解
-----------
1.处理接收的数据,并添加【开始时间】【结束时间】
CREATE TABLE T_NEW AS SELECT * FROM TAG WHERE 1 = 0;
--创建临时表,复刻拉链表的表结构(这里非临时表)
INSERT INTO T_NEW(ID,NAME,BAL,START_DT,END_DT)
SELECT ID,NAME,BAL,'2014-01-04','2999-12-31'
FROM SRC;
--从SRC中获取新数据,并添加【开始时间】【结束时间】
2. 存放经过对比的增量数据
CREATE TABLE T_INC AS SELECT * FROM TAG WHERE 1 = 0;
--同上
INSERT INTO T_INC(ID,NAME,BAL,START_DT,END_DT)
SELECT ID,NAME,BAL,START_DT,END_DT
FROM V_NEW
WHERE (ID,NAME,BAL) NOT IN (
SELECT ID,NAME,BAL
FROM TAG
WHERE END_DT = '29991231');
--插入数据到VT_INC表中
--筛选:防止出现重复数据(三信息字段没有和未结束名单中完全相同的)
-- (相同则说明重复了,没改变则不需要修改拉链表,则不用存储进VT_INC表)
3.如果ID已经存在————修改,不存在则不改
UPDATE TAG
SET END_DT = '2014-01-04'
WHERE END_DT = '2999-12-31' AND ID IN (SELECT ID FROM T_INC);
--修改结束日期为'2014-01-04' (判定为结束了)
--修改筛选:
-- TAG中属于未结束的
-- 且
-- ID在VT_INC中的(要不TAG中所有数据全在'2014-01-04'结束了)
4.添加新的状态
INSERT INTO TAR(ID,NAME,BAL,START_DT,END_DT)
SELECT ID,NAME,BAL,START_DT,END_DT
FROM T_INC;
------------
使用
------------
1.查询所有的有效数据
SELECT * FROM TAG WHERE END_DT = '2999-12-31'
2.查询2022.10.06的历史记录
SELECT *
FROM TAG
WHERE START_DT <= '2022-10-06'
AND END_DT >= '2022-10-06';
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。