構成 Integration Services 包括用於生成和調試包的圖形工具和嚮導;用於執行工作流函式(如 FTP 操作)、執行 SQL 語句或傳送電子郵件的任務;用於提取和載入數據的數據源和目標;用於清理、聚合、合併和複製數據的轉換;用於管理 Integration Services 的管理服務 Integration Services 服務;以及用於對 Integration Services 對象模型編程的
應用程式編程接口 (API)。
發展 SSIS代替了以前版本的數據轉換服務(DTS)。而DTS出身卑微,起初所用的資金極少、資源也不多,它最初通過POC(proof-of-concept)轉換體現出來,後來就被人們叫做Data Pump。POC引起了一些微軟人的興趣,從這時才開始投入一部分資金。
SQL Server 7.0為一些需要的用戶載入了第一個DTS版本。那個時候它很難操作,而且還很貴。一些DBA不得不寫自定義轉換軟體,他們所寫的這些自定義轉換軟體不靈活、而且還很難維護。一些工具還有局限性,如需要源和目標進程精確匹配、直接在單獨資料庫產品上決定,並且/或者轉換性能。有些DBA還寫了自定義分析和轉換套用。例如有些公司現在只對標轉平台用手工編寫的平面檔案分析程式、SQL腳本和轉換代碼,如SSIS。
SQL Server 8.0增加了更多的任務、從而增加了更多的功能。在SQL Server 8.0中還包括Execute Package、FTP、MSMQ Tasks。但是用戶在用DTS處理大數據集和基於腳本工具的內在局限時也遇到了一些挫折。那時正是創建真正的企業繼承工具的時候。
特色 可視化環境
熟悉了SSIS的可視化操作後,給你的感覺應該是震撼的,因為幾乎你所能想得到的ETL操作都能通過簡單拖拽控制項加以實現。
主要得益於SSIS強大Control Flow Function以及那個靈活多樣並且高效的DataFlow Task (BulkInsertTask和Execute SQL Task等可以看成特殊的DataFlowTask)。Control Flow主要負責高層的邏輯拓撲,完成對各個DataFlowTask單元的串接,而DataFlowTask除了提供簡單的SQL語句的執行,兩個節點之間的數據傳輸外,還提供了Aggregation、DataConversion,Merge、Sort等操作,實現了面向多個源和目的端的複雜數據流的整合。另外值得一提的是,SSIS同時也提供For/Foreach Loop Container來完成類似for語句的循環操作。
強大的參數設定功能
SSIS的另一個特色是的參數設定功能,這一點比DTS有了明顯的進步。連線參數,源與目的關聯的表名或者SQL語句的條件子句,都可以通過參數來構建,甚至參數本身可以由其他參數動態賦值(通過Expression功能),這就給用戶提供了非常廣闊界面編程的空間,充分發揮你的想像力,就能夠在可視化界面上實現複雜邏輯功能的ETL操作。
SSIS強大的參數設定功能在一定程度上簡化了SSIS的Package(Package:SSIS基本的可執行單位)程式調用。
功能 SQL Server Integration Services (SSIS) 提供一系列支持業務
應用程式開發 的內置任務、容器、轉換和數據適配器。您無需編寫一行代碼,就可以創建 SSIS 解決方案來使用 ETL 和商業智慧型解決複雜的業務問題,管理 SQL Server 資料庫以及在 SQL Server 實例之間複製 SQL Server 對象。
功能擴展 SQL Server 整合服務(SSIS)是微軟在
SQL Server 2005 中引入的數據轉換服務(DTS)的替代物,它載入了大量不同的組件來導入數據和將數據轉換為實際數據,而不僅僅是被動地導入。但是,這裡有一個問題,即使是新的SSIS工具也無法包括所有我們需要做的工作。
微軟提供了兩個基本的方法來擴展SSIS的功能。其中一個方法是相對簡單的,適用於沒有很多的編程經驗,也不想要編寫複雜邏輯的用戶;而另一個方法是較複雜的,它允許更有經驗的程式設計師深入研究SSIS和更廣泛的擴展SSIS。
簡單方法:腳本
大多數人可能或多或少地熟悉腳本技術,並且SSIS使用VB.NET來允許程式設計師在SSIS包中用腳本編寫行為。與自定義對象相反,腳本的範圍是小而精的;它是用於我們對現有數據包允許或者已經實現的上下文進行一定修改的。
在SSIS數據包中,有兩個元素我們可以用來添加腳本處理:Script Task(在Integration Services Designer套用的Control Flow視窗)以及Script Component(在Data Flow視窗)。每一個都最好在稍微有點不同的環境中使用。
Script Task是更適合用於軟體包中通用目的的Flow Control——它比Script Component更全局化更強大,但是也複雜得多。它在軟體包的
Data Flow 之外運行,並且不受Data Flow工作方式的限制,雖然Script Task一般只當一個軟體包被觸發的時候才運行(雖然我們可以特別地編譯)。Task同樣支持斷點和調試,當我們編寫一個帶有控制邏輯或者執行某些決策的相當複雜的腳本時,這些是非常有用的。例如,Script Task可以查詢
Active Directory 獲取一些信息或者與另外一個數據知識庫進行數據互動——兩者都可以在運行一個包之前進行。
Script Component與Data Flow運作的方式結合得更緊密。Script Component不是在整個包運行一次,它的主要過程是為每個正在處理的數據行運行一次。Script Components也同樣有3個基本的運行上下文:數據源、數據轉換或者數據目的地。Component也同樣比較少互動——比如,它並不支持Script Task那樣的調試。Script Component的最主要用途包括諸如一行行地數據轉換、編譯一個自定義
ODBC 目標、實時錯誤處理或者不通過原SSIS方法處理的轉換操作。
高級方法:自定義對象編程
雖然腳本在SSIS包中的功能已經強大,但是,有時候它還是沒有辦法完成某些任務。在某些情況下,我們必須從頭開始編寫(或者讓某人編寫)一個自定義SSIS擴展。這並不是一件容易的事情;它要求對編程有全面的理解。但是,通過自定義的對象,我們可以使用SSIS進行遠比簡單自動化任務複雜的事情。
比如,如果我們有一個不能支持任何現有SSIS轉換的數據源(例如,有些奇怪的專有數據源),那么我們可以寫入一個自定義的連線管理對象來像使用本地數據源一樣使用該數據。與此類似的是,我們可以用由SSIS提供的相同的程式庫來創建自定義任務、日誌組件或者數據流組件。
上面每個類型的項目都是可以作為SSIS所支持語言的一個基類、屬性和方法集:
Visual Basic 、
C# 、
C++ 、
J# 和
Jscript . C++、C# 和
VB 都傾向於創造最好的結果,因為在這些上下文中它們都傾向於由開發人員和供應商兩者同時廣泛支持。關鍵在於我們所使用的語言不能是一個阻礙;它們都可以插入相同的對外編程接口中。我們同時也可以在需要的時候通過標準Windows形式創建自定義對象的用戶接口。
SSIS自定義對象可以創建的一個極其強大的自定義
Foreach 遍歷器。假設你需要創建一套編程類來為一個集合中每個對象執行特定的操作,比如資料庫中的表。如果你想在大量的上下文中執行這個操作而不重複編寫代碼,那么這是其中的一個最佳方法。特別是當你已經對一些新的數據類型創建了一個自定義的連線管理器(與上面的例子一樣),並且想創建一個自定義foreach操作來處理時,這種方法是非常有用的。
典型用途 下列情況說明了 SSIS 包的典型用途。
合併來自異類數據存儲區的數據
數據通常存儲在很多個不同的數據存儲系統中,從所有源中提取數據並將其合併到單個一致的數據集中確實有一定的難度。這種情況的出現有多個原因。例如:
許多單位要對存儲在早期數據存儲系統中的信息進行歸檔。這些數據在日常操作中可能不重要,但對於需要收集過去很長一段時間內的數據的趨勢分析來說很重要。
單位的各個部門可能會使用不同的
數據存儲 技術來存儲運算元據。包可能需要先從
電子表格 以及關係資料庫中提取數據,然後才能合併數據。
數據可能存儲在對相同數據使用不同架構的資料庫中。包可能需要先更改列的數據類型或將多個列的數據組合到一列中,然後才能合併數據。
Integration Services 可以連線到各種各樣的數據源,包括單個包中的多個源。包可以使用 .NET 和 OLE DB 訪問接口連線到關係資料庫,還可以使用 ODBC 驅動程式連線到多個早期資料庫。包還可以連線到
平面檔案 、Excel 檔案和 Analysis Services 項目。
Integration Services 包含一些源組件,這些組件負責從包所連線的
數據源 中的平面檔案、Excel
電子表格 、XML 文檔和關係資料庫中的表及視圖提取數據。
然後,通常要用 Integration Services 包含的轉換功能對數據進行轉換。數據轉換為兼容格式後,就可以將其物理合併到一個數據集中。
數據在合併成功且套用轉換後,通常會被載入到一個或多個目標。Integration Services 包含將數據載入到
平面檔案 、原始檔案和關係資料庫時所用的目標。數據也可以載入到記憶體中的記錄集中,供其他包元素訪問。
填充數據倉庫和數據集市
數據倉庫和數據集市中的數據通常會頻繁更新,因此數據載入量通常會很大。
Integration Services 包含一個可直接將數據從
平面檔案 大容量載入到 SQL Server 表和視圖中的任務,還包含一個目標組件,該組件可以在數據轉換過程的最後一步將數據大容量載入到 SQL Server 資料庫中。
SSIS 包可配置為可重新啟動。這意味著可以從某個預先確定的檢查點(包中的某個任務或容器)重新運行包。重新啟動包這一功能可節省很多時間,尤其是包需要處理來自一大批源的數據時。
可以用 SSIS 包載入資料庫中的維度表和事實數據表。如果維度表的源數據存儲在多個
數據源 中,包可以將該數據合併到一個數據集中,並在單個進程中載入維度表,而不是為每個數據源使用單獨的進程。
更新
數據倉庫 和數據集市中的數據可能很複雜,因為這兩種類型的數據存儲區通常都包含可能難以通過數據轉換過程管理的漸變維度。由於能夠動態創建用於插入和更新記錄、更新相關記錄以及向表添加新列的 SQL 語句,因此,漸變維度嚮導可自動支持漸變維度。
此外,Integration Services 包中的任務和轉換可以處理 Analysis Services 多維數據集和維度。包更新了建立多維數據集所基於的資料庫中的表後,您可以使用 Integration Services 任務和轉換來自動處理多維數據集和維度。自動處理多維數據集和維度有助於使以下兩種環境中的用戶始終獲得最新的數據:訪問多維數據集和維度中信息的用戶和訪問關係資料庫中數據的用戶。
Integration Services 還可以在數據載入到其目標之前計算函式。如果
數據倉庫 和數據集市存儲了聚合信息,那么 SSIS 包可以計算 SUM、AVERAGE 和 COUNT 之類的函式。SSIS 轉換還可以透視關係數據,並將其轉換為不太規範的格式,以便更好地與數據倉庫中的表結構相兼容。
清除數據和將數據標準化
無論數據是載入到
在線上事務處理 (OLTP)、在線上分析處理 (OLAP) 資料庫、Excel
電子表格 還是載入到檔案,都需要在載入前將數據進行清理和標準化。數據可能由於下列原因而需要更新:
數據由一個單位的多個部門提供,每個部門使用不同的約定和標準。可能需要對數據進行不同的格式處理,然後才能使用這些數據。例如,可能需要將名和姓組合到一列中。
數據是租用或購買的。可能需要將數據進行標準化和清理以滿足業務標準,然後才能使用這些數據。例如,單位需要驗證所有記錄使用了相同的狀態縮寫集或相同的產品名稱集。
數據是
區域設定 特定的。例如,數據可能使用不同的日期/時間和數值格式。如果要合併來自不同區域設定的數據,那么在載入數據前必須先將其轉換到同一區域設定以避免數據損壞。
Integration Services 包含一些內置轉換,可將其添加到包中以清理數據和將數據標準化、更改數據的大小寫、將數據轉換為不同類型或格式或者根據
表達式 創建新列值。例如,包可將姓列和名列連線成單個全名列,然後將字元更改為大寫。
Integration Services 包還可以使用精確查找或模糊查找來找到引用表中的值,通過將列中的值替換為引用表中的值來清理數據。通常,包首先使用精確查找,如果該查找方式失敗,再使用模糊查找。例如,包首先嘗試通過使用產品的主鍵值來查找引用表中的產品名。如果此搜尋無法找到產品名,包再嘗試使用產品名模糊匹配方式進行搜尋。
另一種轉換通過將數據集中相似的值分組到一起來清理數據。有些記錄可能是重複的,所以不應未經進一步計算就將其插入到資料庫中。這種轉換對識別此類記錄很有用。例如,通過比較客戶記錄中的地址可以識別許多重複的客戶。
將商業智慧型置入數據轉換過程
數據轉換過程需要內置邏輯來動態回響其訪問和處理的數據。
可能需要根據數據值對數據進行匯總、轉換和分發。根據對列值的評估,該過程甚至可能需要拒絕數據。
若要滿足此需求,SSIS 包中的邏輯可能需要執行以下類型的任務:
計算數據並套用數據轉換。
根據數據值將一個數據集拆分為多個數據集。
將不同的聚合套用到一個數據集的不同子集。
將數據的子集載入到不同目標或多個目標。
Integration Services 提供了用於將商業智慧型置入 SSIS 包的容器、任務和轉換。
容器通過枚舉檔案或對象和計算
表達式 來支持重複運行工作流。包可以計算數據並根據結果重複運行工作流。例如,如果日期在當月,則包執行某一組任務;如果不在,則包執行另一組任務。
使用輸入參數的任務也可以將商業智慧型置入包中。例如,輸入參數的值可以篩選任務檢索的數據。
轉換可以計算表達式,然後根據結果將數據集中的行傳送到不同的目標。數據劃分完成後,包可以對數據集的每個子集套用不同的轉換。例如,表達式可以計算日期列,添加相應期間的銷售數據,然後僅存儲摘要信息。
還可以將一個數據集傳送到多個目標,然後對此相同數據套用不同的轉換集。例如,一組轉換可以匯總此數據,而另一組轉換通過查找引用表中的值並添加其他源的數據來擴展此數據。
使管理功能和數據載入自動化
管理員經常希望將管理功能自動化,例如備份和還原資料庫、複製 SQL Server 資料庫及其包含的對象、複製 SQL Server 對象和載入數據。Integration Services 包可以執行這些功能。
Integration Services 包含專為以下目的設計的任務:複製 SQL Server
資料庫對象 ,例如表、視圖和
存儲過程 ;複製 SQL Server 對象,例如資料庫、登錄和統計信息;使用
Transact-SQL 語句添加、更改和刪除 SQL Server 對象和數據。
OLTP 或 OLAP 資料庫環境的管理通常包括數據的載入。Integration Services 包含幾個使數據大容量載入更加便利的任務。可以使用某個任務將文本檔案中的數據直接載入到 SQL Server 表和視圖中,還可以在對列數據套用轉換後使用目標組件將數據載入到 SQL Server 表和視圖。
Integration Services 包可運行其他的包。包含多個管理功能的數據轉換解決方案可分為多個包,使管理和重用包更為容易。
如果需要在不同的伺服器上執行相同的管理功能,可以使用包。包可以使用循環對伺服器進行枚舉並在多台計算機上執行相同的功能。為了支持 SQL Server 的管理,Integration Services 提供了可以遍歷 SQL 管理對象 (SMO) 的對象的枚舉器。例如,包可使用 SMO 枚舉器對某個 SQL Server 安裝中的 Jobs 集合中的每個作業執行相同的管理功能。
另外,還可以使用 SQL Server 代理作業來安排 SSIS 包