码迷,mamicode.com
首页 > 其他好文 > 详细

ETL增量处理总结

时间:2015-01-23 17:55:16      阅读:258      评论:0      收藏:0      [点我收藏+]

标签:

1 LOG表

1.1 思路

用log表记录业务库某表yw_tableA发生变化数据的主键。数据进入BI库目标表bi_tableA前,先根据log表记录的主键进行delete。

1.2 设计

 
1.2.1 log表结构
CREATE TABLE  LOG
(
  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)。

技术分享

图1 业务数据进入日志和临时表

技术分享

图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数据处理,删除或状态位。

技术分享

图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 )

ETL增量处理总结

标签:

原文地址:http://www.cnblogs.com/BlueBreeze/p/4244662.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!