簡體   English   中英

SSIS ETL轉換負載如何處理外鍵表數據的創建/更新(即UPSERT)?

[英]SSIS ETL Transform-Load How To Handle Create / Update (i.e. UPSERT) for Foreign Key Table Data?

我將按照以下標准慣例在一組OfficeEmployeeLocation表上執行ETL:首先通過Extract包將所有數據放入Staging表中,然后對每個staging表執行Transform-Load以獲取數據放入相應的表中。

在我的每個Transform-Load SSIS程序包中,我正在使用MERGE JOINCONDITIONAL拆分來執行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表中。

如您所見, SampleLocationSamplePerson數據可能會從2個或更多來源進入系統。 在上面的示例中,對於SampleLocation我得到一個僅具有地址的Location數據文件。 我還從StageSampleOffice表中獲得了來自各種辦公類型的Office記錄的地址,作為Office記錄的一部分。

到目前為止我嘗試過的

我已經將“ 提取”工作流與“轉換-加載”工作流分開了。 我每個登台表都有1個提取包,該包實際上從源(平面文件或表)中讀取數據,截斷登台表,並將所有內容按原樣導入到登台表中。

我在想

  • 對於StageSampleOffice存在的Person數據,我首先將數據插入StageSamplePerson表(圖中未顯示),然后執行SamplePersonTransform-Load程序包,該程序將為這些Persons創建或更新
  • 對於StageSampleOffice存在的位置數據,我將首先將數據插入StageSampleLocation表(圖中未顯示),然后對SampleLocation執行Transform-Load程序包,該程序將為這些Location進行創建或更新。

這樣,當流程返回到對SampleOffice表執行Transform-Load的主程序包時,所有FK行都將出現在相應的表中。

這是一個好主意,還是有更好的方法。

謝謝!

在我看來就像“一個,六個,另一個的六個”。

無論哪種方式,您最終都要檢查每個人和每個位置,以查看它是否已在最終目標表中,並進行插入。

無論您是否將它們“預壓縮”在登台表中,工作負載都將是相同的。 我會采用對您來說似乎更直觀的方法,因為這將是您將來會發現更易於維護的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM