ETL增量處理總結

1 LOG表

1.1 思路

用log表記錄業務庫某表yw_tableA發生變化數據的主鍵。數據進入BI庫目標表bi_tableA前,先根據log表記錄的主鍵進行delete。sql

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

image

圖1 業務數據進入日誌和臨時表ide

image

圖2 目標表初始化以及臨時表數據進入目標spa

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數據處理,刪除或狀態位。

image

圖3 關聯設計3d

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' )
相關文章
相關標籤/搜索