![](/img/trans.png)
[英]How to use the master table as a lookup to populate the foreign key in the Reference table during SSIS data load
[英]SSIS ETL Transform-Load How To Handle Create / Update (i.e. UPSERT) for Foreign Key Table Data?
我將按照以下標准慣例在一組Office
, Employee
, Location
表上執行ETL:首先通過Extract包將所有數據放入Staging表中,然后對每個staging表執行Transform-Load以獲取數據放入相應的表中。
在我的每個Transform-Load SSIS程序包中,我正在使用MERGE JOIN
和CONDITIONAL
拆分來執行CUD ( 創建,更新,刪除 )。
當暫存表中的數據與對應的實際表為1對1時,這可以很好地工作。 在下面的場景中(參見圖片), SampleLocation
表與SampleLocation
表是StageSampleLocation
。
我遇到的麻煩是決定如何處理暫存表中包含將要進入外鍵表的數據的情況。
如果您看下面的數據庫圖...
來自StageSampleOffice
的數據進入具有Office數據的字段的SampleOffice
中。 除了辦公室數據之外, StageSampleOffice
還具有Person數據-在此示例中,將需要在FK表SamplePerson
查找OfficeManagerName
字段。 如果該名稱在SamplePerson
表中不存在,則需要首先將該名稱插入SamplePerson
,並且該人的PersonId
PK值將被檢索並作為FK值存儲在SampleOffice
表中導入的Office的SampleOffice
中,在我的數據流任務中。
同樣,對於StageSampleOffice
的地址信息,需要在SampleLocation
FK表中查找詳細信息,如果該地址不存在,則需要插入一個新地址,並帶有StageSampleOffice
的相應值。 完成后,該地址的LocationId
將作為FK存儲在SampleOffice
表中。
如您所見, SampleLocation
和SamplePerson
數據可能會從2個或更多來源進入系統。 在上面的示例中,對於SampleLocation
我得到一個僅具有地址的Location數據文件。 我還從StageSampleOffice
表中獲得了來自各種辦公類型的Office記錄的地址,作為Office記錄的一部分。
我已經將“ 提取”工作流與“轉換-加載”工作流分開了。 我每個登台表都有1個提取包,該包實際上從源(平面文件或表)中讀取數據,截斷登台表,並將所有內容按原樣導入到登台表中。
我在想
StageSampleOffice
存在的Person數據,我首先將數據插入StageSamplePerson
表(圖中未顯示),然后執行SamplePerson
的Transform-Load程序包,該程序將為這些Persons創建或更新 StageSampleOffice
存在的位置數據,我將首先將數據插入StageSampleLocation
表(圖中未顯示),然后對SampleLocation
執行Transform-Load程序包,該程序將為這些Location進行創建或更新。 這樣,當流程返回到對SampleOffice
表執行Transform-Load的主程序包時,所有FK行都將出現在相應的表中。
這是一個好主意,還是有更好的方法。
謝謝!
在我看來就像“一個,六個,另一個的六個”。
無論哪種方式,您最終都要檢查每個人和每個位置,以查看它是否已在最終目標表中,並進行插入。
無論您是否將它們“預壓縮”在登台表中,工作負載都將是相同的。 我會采用對您來說似乎更直觀的方法,因為這將是您將來會發現更易於維護的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.