Sql-Server

ETL:從 200 個表中提取 - SSIS 數據流還是自定義 T-SQL?

  • September 3, 2021

根據我的分析,我們數據倉庫的完整維度模型需要從 200 多個源表中提取。其中一些表將作為增量載入的一部分被提取,而其他表將被完全載入。

需要注意的是,我們有大約 225 個源數據庫,它們都具有相同的模式。

據我所知,在 SSIS 中使用 OLE DB 源和 OLE DB 目標建構簡單的數據流需要在設計時確定列和數據類型。這意味著我最終將獲得 200 多個僅用於提取的數據流。

從可維護性的角度來看,這讓我覺得這是一個大問題。如果我需要對提取程式碼進行某種徹底的更改,我將不得不修改 200 個不同的數據流。

另一種選擇是,我編寫了一個小腳本,它讀取我想從一組元數據表中提取的源數據庫、表名和列。程式碼在多個循環中執行,並使用動態 SQL 通過連結伺服器和 OPENQUERY 從源表中提取。

根據我的測試,這仍然不如使用具有 OLEDB 源和目標的 SSIS 數據流快。所以我想知道我有什麼樣的選擇。到目前為止的想法包括:

  1. 使用EZAPI以程式方式生成具有簡單數據流的 SSIS 包。要提取的表和列將來自前面提到的相同元數據表。
  2. 購買第三方軟體(動態數據流組件)

解決這個問題的最佳方法是什麼?當談到 .NET 程式時,我是一個初學者,因此僅掌握基礎知識所需的時間也是一個問題。

我不想在一個包中包含 200 個數據流。僅僅打開和驗證所花費的時間會讓你在你的時間之前變老。

EzAPI 很有趣,但是如果您是 .NETSSIS 的新手,哦,不,您不希望這樣。我認為您將花費更多時間來學習 SSIS 對像模型並可能與 COM 打交道,而不是實際完成工作。

由於我很懶,我會將 BIML 作為您未列出的免費選項插入。從 SO https://stackoverflow.com/questions/13809491/generating-several-similar-ssis-packages-file-data-source-to-db/13809604#13809604的答案

  • Biml是一個有趣的野獸。Varigence 很樂意向您出售 Mist 的許可證,但這不是必需的。您只需要BIDSHelper,然後瀏覽BimlScript並尋找與您的需求相近的配方。完成後,點擊 BIDSHelper 中的上下文相關菜單按鈕並嗖嗖作響,它會生成包。

我認為這也可能是您的一種方法。你定義你的 BIML 來描述你的包應該如何表現,然後生成它們。在您描述在哪裡進行更改並且必須修復 N 個包的場景中,不,您修復了問題的定義並重新生成包。

或者,如果您已經對該框架足夠熟悉,則可以使用 EzAPI 之類的東西來修復所有損壞的東西。哎呀,既然您已將其標記為 2005,如果您需要對現有軟體包進行大規模修改,您也可以嘗試一下PacMan 。

SSIS 設計注意事項

一般來說,我盡量讓我的包專注於解決單個任務(載入銷售數據)。如果這需要 2 個數據流,那就這樣吧。我討厭繼承的是導入導出嚮導中的一個包,在一個包中包含許多不相關的數據流。將它們分解成可以解決非常具體問題的東西。隨著表面積的減少,它使未來增強的風險降低。另一個好處是我可以DimProducts在我的奴才處理載入SnowflakeFromHell包的同時進行載入。

然後使用主包來編排子工作流程。我知道你在 2005 年,但 SQL Server 2012 發布的 SSIS 是貓的睡衣。我喜歡項目部署模型以及它允許包之間的緊密集成。

TSQL 與 SSIS(我的故事)

至於純 TSQL 方法,在之前的作業中,他們使用了 73 步作業將所有 Informix 數據複製到 SQL Server 中。它通常需要大約 9 個小時,但可能會延長到 12 個小時左右。在他們購買了新的 SAN 後,它下降到大約 7 個多小時。相同的邏輯過程,在 SSIS 中重寫是一致的不到 2 小時。很容易,縮短那個時間的最大因素是我們使用 SSIS 獲得的“免費”並行化。代理作業以串列方式執行所有這些任務。主包基本上將表劃分為處理單元(“執行複製表 1”、表 2 等的 5 個並行序列化任務集),我試圖將儲存桶劃分為準相等大小的工作單元。這允許 60 個左右的查找參考表快速填充,然後處理速度減慢,因為它進入“

使用 SSIS 對我來說的其他好處是,我可以獲得“免費”配置、日誌記錄和訪問 .NET 庫的方形數據,我需要將它撞成一個圓孔。我認為由於野獸的圖形特性,維護(通過維護)SSIS 包比純 TSQL 方法更容易。

與往常一樣,您的里程可能會有所不同。

引用自:https://dba.stackexchange.com/questions/30473