ETL算法
数据仓库特点
建立在业务系统之上
- 面向主题
数据仓库内的信息是按主题进行组织的 - 实时性要求不高
- 保存过去和现在的数据
- 数据很少更新
- 支持分析决策 (管理层)
- 数据是提炼的或者综合的
业务系统特点
- 面向应用 (app)
- 数据是详细的
- 数据可以更新,实时
- 支持事务处理
- 保持当前数据
拉链定义
数据仓库中
记录数据在某一时间内的状态以及数据在某一时点上的变化的数据存储方式
优点
数据优化
- 节省存储空间,避免没必要的重复数据(化繁为简)
- 记录数据变化,更加直观
缺点
断链难以恢复
算法
新增数据 ==> 开链
删除数据 ==> 关链
修改数据 ==> 先关链,在开新的拉链
流程
- 创建临时表 TA_ONE
存放、转换处理后的数据
所有数据抽过来
create table TA_ONE as select * from TA_yuan where 1=0;
--获取 TA_OLD 的表头
insert into TA_ONE (ID,NAME,BAL,START_DT,END_DT) --添加数据
select ID,NAME,BAL,to_date('2022-04-04',yyyyMMdd),to_date('2999-12-31',yyyyMMdd) from SJ_yuan;
--从 SJ_yuan 中数据添加进去
commit;
- 创建临时表 TA_TWO
存放比对出增量的数据
新增修改
create table TA_TWO as select * from TA_yuan where 1=0;
insert into TA_TWO (ID,NAME,BAL,START_DT,END_DT)
select ID,NAME,BAL,START_DT,END_DT
from TA_ONE
where (ID,NAME,BAL) not in (
select * from TA_yuan where END_DT = to_date('2999-12-31',yyyyMMdd));
commit;
- 修改 TA_yuan
关链
update TA_yuan set END_DT = to_date('2022-04-04',yyyyMMdd)
where END_DT = to_date('2999-12-31',yyyyMMdd) and ID in (select ID from TA_TWO);
--开链状态 并关链
commit;
- 修改
开链插入数据
insert into TA_yuan select * from TA_TWO;
commit;
使用
四号的数据
开始日期<=‘2014-04-04’
AND
结束日期 > ‘2014-04-04’;