2016-09-01 22 views
0

我試圖在SQL 2014數據庫中爲我們的類型1緩慢更改維度表實施ETL過程。負載需要在服務器之間進行,我寧願不使用鏈接服務器。如何處理使用SSIS從源中刪除的行慢速更改維度

我一直在尋找如何在SSIS中做到這一點,並發現緩慢變化的維度嚮導工作正常,除了這似乎只允許插入新的行或更新行的業務關鍵匹配,但是在維度表中存在記錄時,我沒有找到它允許我處理的地方,但是從源刪除了該記錄。我想確保這些被刪除。我錯過了什麼嗎?有沒有人找到更好的方法來處理SSIS中的這個問題?

我知道我可以將所有內容都轉儲到目標服務器上的另一個表中,然後編寫TSQL合併,但似乎應該是在SSIS中執行此操作的一種簡單方法。

+0

不相關,只是想知道,鏈接服務器的使用有什麼問題? – Anton

+1

您誤解了SSIS ...您需要在合併過程中將數據移至表中。 SSIS本身沒有OUTPUT,但它確實有一個錯誤處理方法,可用於暫存「已刪除」行。當然,一個固定的TSQL MERGE也可以這樣做,但假設不同的表需要SSIS ...然後在SSIS中識別出刪除的行是不存在的行。但是,在SSIS中,壞行仍然是行。 –

+0

感謝您的信息。我正在考慮升級TSQl合併將是最好的選擇。有幾個原因,我不想使用鏈接服務器的一些周圍的安全,我已經得到了一些過去(其他開發人員無法按照我設置的方式做一些事情,並最終在SA中進行身份驗證等),還因爲這個過程需要能夠推送到多個服務器並輕鬆地轉到新的服務器上,並且使用SSIS中的包配置更改連接字符串非常簡單。當然可以通過鏈接服務器和一些動態SQL來完成。 – schiznig

回答

0

首先,我會避免SSIS中的SCD功能,因爲它的性能往往非常糟糕 - 實際上我被告知要通過MS認證的培訓師來避免它,還有很多有很多經驗的人。它的尺寸很小,但很快就會變得難以管理。有人認爲某些情況下可以使用博客文章here,但即使他們建議使用臨時表進行更新。

如果你想這樣做在SSIS中,你可以使用查找發現需要刪除(找到你的目的地其不在使用不匹配輸出的源行)的行,那麼OLE DB命令刪除它們。但是我會認真考慮將數據移動到一個臨時區域,並在TSQL中執行此操作,因爲SSIS會通過折騰行來完成此操作。與SCD工具類似 - 對於少量數據可能還行,但如果您處理的金額較大(或將來可能),則很可能無法管理。

如果您不想將所有數據移動到臨時區域,可以使用SSIS構建僅保存需要刪除的行的唯一ID的表,然後觸發執行SQL任務從控制流中刪除它們。

+0

感謝您的信息。這些查找表中的大部分都很小,最大的可能是5000行,但它似乎是暫存區/ TSQL方法最好。我懷疑staging/TSQL合併將是我需要做的,但只是想檢查SSIS是否有一個神奇的子彈,因爲當我看到SCD轉換時我有點興奮。 – schiznig

+0

@schiznig - 不幸的是,SSIS有很多功能,比起它的價值來說真的更麻煩。您正確地使用它來避免鏈接的服務器和管理配置 - 這是一個閃耀的領域 - 但是很多任務和轉換在某種程度上都不是最佳的。而且在某些情況下,它們比使用SQL更復雜。 –