通常一個 ETL Package 是由多個控制流和數據流共同組成,有的時候 ETL 的步驟可能會比較多,整 個流程執行下來的時間可能比較長。假設在 ETL Package 中包含5個Task,前3個Task執行超過1個小時 ,到了第4個Task的時候發生失敗。如果下次執行的時候重新從第1個任務開始執行,那麼又要花費1個小 時等待 1-3 任務執行,無疑在效率上講是非常低的。特別是在數據倉庫的應用上,往往從數據源到 Staging的過程中有千萬級甚至億級的數據要加載,加載完畢之後再進入到維度和事實表。如果在進入維 度和事實表的過程中發生失敗,就意味著下次需要重新加載數據到Staging表。而通過檢查點CheckPoint 的設置可以解決這個問題,通過合理的設置可以跳過上一次已經成功執行過一些步驟而直接從失敗的地 方重新開始執行,這樣大大的提高了包的執行效率。
下面這個 ETL 示例簡單的模擬了從一個數據源抽取數據然後輸出到一個數據表和一個平面文件的過 程,之後再看 CheckPoint 的使用。
USE BIWORK_SSIS GO IF OBJECT_ID('CK_Address') IS NOT NULL DROP TABLE CK_Address GO IF OBJECT_ID('CK_AddressAudit') IS NOT NULL DROP TABLE CK_AddressAudit GO CREATE TABLE CK_Address ( AddressID INT, AddressLine1 NVARCHAR(60), AddressLine2 NVARCHAR(60), City NVARCHAR(30) ) CREATE TABLE CK_AddressAudit ( ID INT PRIMARY KEY IDENTITY(1,1), CityName NVARCHAR(60), Counts INT )
ETL 過程 -
EST_TruncateAddress - TRUNCATE TABLE dbo.CK_Address TRUNCATE TABLE dbo.CK_AddressAudit
DFT_LoadAddress - 從 AdventureWorks2012.People.Address 中抽取數據到 dbo.CK_Address 中
DFT_SaveAddressAudit - 對 CK_Address 表中的數據做出一些統計然後寫入到 dbo.CK_AddressAudit 中
DFT_OutputAddressAudit - 將 dbo.CK_AddressAudit 中的數據輸出到一個文本文件中