最具影响力的数字化技术在线社区

168主编 发表于 2016-8-17 18:57:48

ETL增量处理总结

1 LOG表1.1 思路 用log表记录业务库某表yw_tableA发生变化数据的主键。数据进入BI库目标表bi_tableA前,先根据log表记录的主键进行delete。1.2 设计1.2.1 log表结构CREATE TABLELOG
(
key_1 VARCHAR(20),--主键1
key_2 VARCHAR(20),--主键2
tName VARCHAR(20),--来源表
updateDate DATE,--更新日期
loadDate DATE--加载日期
);

1.2.2 etl流程

[*]yw_tableA中发生变化的数据,主键存入log,所有列存入BI库临时表tmp_bi_tableA(图1);

[*]根据log表,删除BI库bi_tableA中已存在数据(图2);

[*]tmp_bi_tableA数据进入bi_tableA(图2)。

http://images.cnitblog.com/blog/272439/201501/231707289856091.png图1 业务数据进入日志和临时表http://images.cnitblog.com/blog/272439/201501/231707300781292.png图2 目标表初始化以及临时表数据进入目标1.2.3 附部分sql--目标表初始化delete from bi_tableA tg where exists (select 1 from tmp_bi_tableA tmp where tg.key1 = tmp.key1) 2 左关联(键比对、全表比对)2.1 思路 业务库某表yw_tableA左关联BI库bi_tableA,可以关联上的舍弃;关联不上的进入目标表bi_tableA,然后对同一个业务主键多条进行处理(打上标记或delete)。比较适合小维表更新。2.2 设计2.2.1 目标表结构
create tabel bi_tableA(physical_key int identity,--物理键,自增logical_key varchar(20),   --业务键col1 varchar(20),--其他列nowstate char(1),--状态loadDate DATE--加载日期) 2.2.2 etl流程

[*]yw_tableA与bi_tableA主键或多列比对,得出需要进入目标表的记录,进入目标表bi_tableA;

[*]目标表bi_tableA数据处理,删除或状态位。

http://images.cnitblog.com/blog/272439/201501/231707313916493.png图3 关联设计2.2.3 附部分sql
--目标表状态更新(同一业务键记录保留最新)update bi_tableA set nowstate='0' where physical_key not in (select max(physical_key) from bi_tableA group by logical_key having count(physical_key) > 1 and nowstate='1' ) 作者:BlueBreeze
出处:http://www.cnblogs.com/BlueBreeze/
页: [1]
查看完整版本: ETL增量处理总结