SSIS 基礎知識


微軟 BI 系列隨筆 - SSIS 2012 基礎 - SSIS 基礎知識


SSIS 介紹

SSIS - SQL Server Integration Services 是用於實現企業級數據集成和數據轉換解決方案的平台。 使用 Integration Services 可解決復雜的業務問題,具體表現為:復制或下載文件,發送電子郵件以響應事件,更新數據倉庫,清除和挖掘數據以及管理 SQL Server 對象和數據。 這些包可以獨立使用,也可以與其他包一起使用以滿足復雜的業務需求。Integration Services 可以提取和轉換來自多種源(如 XML 數據文件、平面文件和關系數據源)的數據,然后將這些數據加載到一個或多個目標。

Integration Services 包含一組豐富的內置任務和轉換、用於構造包的工具以及用於運行和管理包的 Integration Services 服務。 可以使用 Integration Services 圖形工具來創建解決方案,而無需編寫一行代碼;也可以對各種 Integration Services 對象模型進行編程,通過編程方式創建包並編寫自定義任務以及其他包對象的代碼。

SSIS 的基本概念

包 - Package

包是一個有組織的集合,其中可包括連接(Connection Managers)、控制流元素(Control Flow)、數據流元素(Data Flow)、事件處理程序(Event Handlers)、變量(Variables)、參數和配置(Parameters and Configurations). 包是可被檢索、執行和保存的工作單元。包可以部署到 SSIS 服務器或者文件系統執行。 


以下關系圖顯示了一個簡單包,其中包含一個帶有數據流任務的控制流,而數據流任務中又包含數據流。
具有控制流和數據流的包

連接管理器 - Connection Managers

SSIS提供項目級別的連接管理器和包級別的連接管理器。

項目級別的連接管理器可以在各個包之間共享。對於使用相同配置的連接來說,只需要在項目級別配置一次,就可以在多個包之間使用了。

包級別的連接管理器只能在包級別使用。同一個包內部的不同的任務和數據流任務之間可以共享同一個連接。在包級別的連接管理器可以看到項目級別的連接管理器。

控制流 - Control Flow

控制流是一個包含各種任務(Task)的容器。這些任務之間可以通過各種優先級約束(成功,失敗,完成)鏈接以實現順序序執行。任務之間也可以不使用任何優先級約束,這樣的任務對其他的任務沒有依賴或者不被別的任務依賴,他們可以平行執行。常見的任務有Execute SQL Task和Data Flow Task。

控制流中可以使用容器(Containers)來包含和組織任務。常見的容器有For Loop容器,Foreach容器 和 Sequence容器。

 

下圖包含了一個順序執行的任務和一個與之平行任務。

數據流 - Data Flow

數據流是以數據為導向的數據流任務(Data Flow Task)的具體實現。數據流通常包含數據源(Source)、轉換(Transform)和目的地(Destination)。在一個數據流中數據從數據源采集,經過轉換(矯正、分離、合並)並最終到達目的地。雖然所有的數據都是按照這個過程(依賴於設計)處理,但是整個過程中每條數據之間是並行執行的關系。比如第一條數據已經在轉換了,第二條數據才剛剛被采集到。

下圖說明了一個從不同的數據源采集數據並處理到不同的目的地的數據流。

 

參數 - Parameters

SSIS中參數分為項目(Project)參數和包(Package)參數。

項目參數可用於向項目中的一個或多個包提供項目接收的任何外部輸入。通常定義一些基本的數據,比如數據庫連接字符串,服務器連接字符串。

包參數可以用於給一個包提供接收的外部輸入。通常定義一些包級別特定的數據,比如包處理的篩選條件,數據源所在的文件夾等。

使用參數可以實現快速的執行和部署包或者整個項目。但是如果是要部署單個的包,則盡量避免使用參數而應該使用配置。

下圖列出了一些項目級別的參數。

 

事件處理程序 - Event Handlers

在運行時,可執行文件(包以及 Foreach 循環容器、For 循環容器、序列容器和任務宿主容器)會引發事件。 例如,錯誤發生時會引發 OnError 事件。 可以為這些事件創建自定義事件處理程序,以擴展包的功能並使包在運行時更容易管理。 事件處理程序可以執行諸如下列任務:

當包或任務運行完成時清除臨時數據存儲。
在包運行前檢索系統信息,以便評估資源可用性。
在引用表中的查找失敗時刷新表中的數據。
當發生錯誤或警告時,或者當任務失敗時,發送電子郵件。
如果事件沒有事件處理程序,則將該事件提升到包中容器層次結構中的上一級容器。 如果此容器具有事件處理程序,則該事件處理程序當事件發生時運行。 如果沒有,則將該事件提升到容器層次結構中的上一級容器。

下圖列出了所有可用的事件處理程序。

 

變量 - Variables

變量是在包內部使用的作為控制或者傳遞的信息。每個變量都有自己的作用域(Scope),父容器級別的變量可以被子容器使用,子容器級別的變量對父容器不可見。

SSIS中的變量分為系統變量和用戶變量。系統變量是系統內置的,對用戶來說是只讀的。用戶定義變量由包開發人員定義,可以使用參數、配置信息、表達式和常量來賦值。通過設置用戶變量的只讀屬性(ReadOnly)讓變量不可修改。

日志 - Loggin

SSIS中通過配置包的日志,可以詳細記錄包以及內部任務的運行時信息。可以為包內的任何可執行文件()任務記錄日志,日志的內容包括各種事件及時間的屬性。可以為一個包定義多個日志類型。例如可以為同一個包指定Text Files和SQL Server級別的日志記錄,一旦SQL Server出現問題,Text Files記錄的日志可以很好的幫助我們診斷出錯信息。使用SQL Server類型的日志記錄會在數據庫的系統表中創建一張sysssislog的表。該表記錄了包執行的ID,任務的執行ID,起止時間及狀態信息。

包配置 - Package Configurations

包配置在SSIS 2012之前的版本中非常重要,在SSIS 2012的版本中使用包級別部署的時候也非常有用(包配置可用於包部署模型。 對於項目部署模型,參數用於代替配置。) 

包配置具有下列優點:

  • 使用配置可以更輕松地將包從開發環境轉移到生產環境中。 例如,配置可以更新源文件的路徑,或者更改數據庫或服務器的名稱。
  • 將包部署到多台不同的服務器時,配置非常有用。 例如,用於每個已部署包的配置中的變量可以包含不同的磁盤空間,並且如果可用磁盤空間不滿足此值,包將不會運行。
  • 配置可以使包更加靈活。 例如,配置可以更新在屬性表達式中使用的變量的值。

Integration Services 支持幾種不同的存儲包配置(例如 XML 文件、SQL Server 數據庫中的表以及環境變量和包變量)的方法。

每個配置都是一個屬性/值對。 XML 配置文件和 SQL Server 配置類型可以包括多個配置。
在創建用於安裝包的包部署實用工具時將會包括這些配置。 在安裝包時,可以在安裝包的過程中更新配置。

Integration Services 提供了直接配置和間接配置。 如果直接指定配置,Integration Services 會在配置項和包對象屬性之間創建直接鏈接。 如果源的位置不更改,則直接配置是較好的選擇。 間接配置使用環境變量。 配置不直接指定配置設置,而是指向環境變量,環境變量又包含配置值。 如果對於包的每個部署,配置的位置都可以更改,則使用間接配置是較好的選擇。例如,在數據庫中直接指定包級別的配置,而在環境變量中(或者XML、參數)中簡介指定包級別配置所在的數據庫。SSIS在執行時,首先加載環境變量(直接配置),通過直接配置找到包級別的配置信息(間接配置)並加載運行。 

包瀏覽器 - Package Explorer

包瀏覽器包含了整個包里面的所有內容,並且以折疊數的方式展現,通過包瀏覽器可以快速的找到並定位包級別的任何元素(可執行文件、條件表達式、參數、事件處理程序、變量、連接管理器以及日志)。

總結

本文介紹了微軟SSIS的基本概念,希望能夠幫助初學SSIS的開發者更好的理解SSIS。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM