用log表記錄業務庫某表yw_tableA發生變化數據的主鍵。數據進入BI庫目標表bi_tableA前,先根據log表記錄的主鍵進行delete。sql
CREATE TABLE LOG ( key_1 VARCHAR(20), --主鍵1 key_2 VARCHAR(20), --主鍵2 tName VARCHAR(20), --來源表 updateDate DATE, --更新日期 loadDate DATE --加載日期 );
圖1 業務數據進入日誌和臨時表ide
圖2 目標表初始化以及臨時表數據進入目標spa
--目標表初始化 delete from bi_tableA tg where exists (select 1 from tmp_bi_tableA tmp where tg.key1 = tmp.key1)
業務庫某表yw_tableA左關聯BI庫bi_tableA,能夠關聯上的捨棄;關聯不上的進入目標表bi_tableA,而後對同一個業務主鍵多條進行處理(打上標記或delete)。比較適合小維表更新。設計
create tabel bi_tableA ( physical_key int identity, --物理鍵,自增 logical_key varchar(20), --業務鍵 col1 varchar(20), --其餘列 nowstate char(1), --狀態 loadDate DATE --加載日期 )
圖3 關聯設計3d
--目標表狀態更新(同一業務鍵記錄保留最新) 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' )