8种ETL调度算法归纳总结,看完这些你就全明白了( 二 )

增量拉链模型> 应用场景
增量拉链 , 目的是追踪数据增量变化历史 , 根据PK比对新拉一条开链数据;
> 算法实现逻辑
1.提取上日开链数据;
2.PK相同变化记录 , 关闭旧记录链 , 开启新记录链;
3.PK不同 , 源表存在 , 新增开链记录
> ETL代码原型
--1. 提取当前有效记录Insert into <临时表-开链-pre> (不含开闭链字段***)Select 不含开闭链字段***From <目标表>Where 结束日期 =date'<最大日期>';--2. 提取当日源系统增量记录<源表临时表-cur>--3. 提取当日源系统新增记录Insert into <临时表-增量-ins>Select 不含开闭链字段***From <临时表-开链-cur>where (***PK***) not in(select ***PK*** from <临时表-开链-pre>);--4. 提取当日源系统历史变化记录Insert into <临时表-增量-upd>Select 不含开闭链字段***From <临时表-开链-cur>inner join <临时表-开链-pre>on (***PK 等值***)where (***变化字段 非等值***);--5. 更新历史变化记录 , 关闭历史旧链 , 开启新链update <目标表> AS T1SET <***变化字段 S1赋值***>,结束日期 = date'<数据日期>'FROM <临时表-增量-upd> AS S1WHERE ( <***PK 等值***> )ANDT1.结束日期 =date'<最大日期>';INSERT INTO <目标表>(不含开闭链字段***,开始时间,结束日期)SELECT 不含开闭链字段***,date'<数据日期>',date'<最大日期>'FROM <临时表-增量-upd>;--6. 插入全新开链数据INSERT INTO <目标表>(不含开闭链字段***,开始时间,结束日期)SELECT 不含开闭链字段***,date'<数据日期>',date'<最大日期>'FROM <临时表-增量-ins>;增删拉链模型> 应用场景
主要是利用业务字段跟踪增量数据中包含删除的变化历史 。
> 算法实现逻辑
1.提取上日开链数据;
2.提取源表非删除记录;
3.PK相同变化记录 , 关闭旧记录链 , 开启新记录链;
4.PK比对 , 源表存在 , 新增开链记录;
5.提取源表删除记录;
6.PK比对 , 旧开链记录存在 , 关闭旧记录链;
> ETL代码原型
--1. 清理目标表《待续...》TRUNCATE TABLE <目标表>; --2. 全量插入INSERT INTO <目标表>(字段***)SELECT 字段***FROM <源表>***JOIN <关联数据>WHERE***;全量增删拉链模型> 应用场景
主要是利用业务字段跟踪全量数据中包含删除的变化历史 。
> 算法实现逻辑
1.提取上日开链数据;
2.提取源表非删除记录;
3.PK相同变化记录 , 关闭旧记录链 , 开启新记录链;
4.PK比对 , 源表存在 , 新增开链记录;
5.提取源表删除记录;
6.PK比对 , 旧开链记录存在 , 关闭旧记录链;
7.PK比对 , 提取旧开链存在但源表不存在记录 , 关闭旧记录链;
> ETL代码原型
--1. 清理目标表 , 《待续...》TRUNCATE TABLE <目标表>; --2. 全量插入INSERT INTO <目标表>(字段***)SELECT 字段***FROM <源表>***JOIN <关联数据>WHERE***;自拉链模型> 应用场景
主要将流水表数据转化成拉链表数据 。
> 算法实现逻辑
借助源表业务日期字段 , 和目标表开链、闭链日期比对 , 首尾相接 , 拉出全历史拉链;
> ETL代码原型
--1. 清理目标表 , 《待续...》TRUNCATE TABLE <目标表>; --2. 全量插入INSERT INTO <目标表>(字段***)SELECT 字段***FROM <源表>***JOIN <关联数据>WHERE***;其它说明1.根据数据仓库最佳实践 , 所有数据表通常还会包含一些控制字段 , 即插入日期、更新日期、更新源头字段 , 这样对于数据变化敏感的数据仓库 , 可以进一步追踪数据变化历史;
2.ETL算法本身是为了更好服务于数据加工过程 , 实际业务实现过程中 , 并不局限于传统算法 , 即涉及到更多适应业务的自定义的ETL算法 。

【8种ETL调度算法归纳总结,看完这些你就全明白了】


推荐阅读