微軟 BI 系列隨筆 - SSIS 2012 基礎(chǔ) - SSIS 基礎(chǔ)知識(shí)
SSIS 介紹
SSIS - SQL Server Integration Services 是用于實(shí)現(xiàn)企業(yè)級(jí)數(shù)據(jù)集成和數(shù)據(jù)轉(zhuǎn)換解決方案的平臺(tái)。 使用 Integration Services 可解決復(fù)雜的業(yè)務(wù)問題,具體表現(xiàn)為:復(fù)制或下載文件,發(fā)送電子郵件以響應(yīng)事件,更新數(shù)據(jù)倉庫,清除和挖掘數(shù)據(jù)以及管理 SQL Server 對(duì)象和數(shù)據(jù)。 這些包可以獨(dú)立使用,也可以與其他包一起使用以滿足復(fù)雜的業(yè)務(wù)需求。Integration Services 可以提取和轉(zhuǎn)換來自多種源(如 XML 數(shù)據(jù)文件、平面文件和關(guān)系數(shù)據(jù)源)的數(shù)據(jù),然后將這些數(shù)據(jù)加載到一個(gè)或多個(gè)目標(biāo)。
Integration Services 包含一組豐富的內(nèi)置任務(wù)和轉(zhuǎn)換、用于構(gòu)造包的工具以及用于運(yùn)行和管理包的 Integration Services 服務(wù)。 可以使用 Integration Services 圖形工具來創(chuàng)建解決方案,而無需編寫一行代碼;也可以對(duì)各種 Integration Services 對(duì)象模型進(jìn)行編程,通過編程方式創(chuàng)建包并編寫自定義任務(wù)以及其他包對(duì)象的代碼。
SSIS 的基本概念
包 - Package
包是一個(gè)有組織的集合,其中可包括連接(Connection Managers)、控制流元素(Control Flow)、數(shù)據(jù)流元素(Data Flow)、事件處理程序(Event Handlers)、變量(Variables)、參數(shù)和配置(Parameters and Configurations). 包是可被檢索、執(zhí)行和保存的工作單元。包可以部署到 SSIS 服務(wù)器或者文件系統(tǒng)執(zhí)行。
以下關(guān)系圖顯示了一個(gè)簡(jiǎn)單包,其中包含一個(gè)帶有數(shù)據(jù)流任務(wù)的控制流,而數(shù)據(jù)流任務(wù)中又包含數(shù)據(jù)流。
連接管理器 - Connection Managers
SSIS提供項(xiàng)目級(jí)別的連接管理器和包級(jí)別的連接管理器。
項(xiàng)目級(jí)別的連接管理器可以在各個(gè)包之間共享。對(duì)于使用相同配置的連接來說,只需要在項(xiàng)目級(jí)別配置一次,就可以在多個(gè)包之間使用了。
包級(jí)別的連接管理器只能在包級(jí)別使用。同一個(gè)包內(nèi)部的不同的任務(wù)和數(shù)據(jù)流任務(wù)之間可以共享同一個(gè)連接。在包級(jí)別的連接管理器可以看到項(xiàng)目級(jí)別的連接管理器。
控制流 - Control Flow
控制流是一個(gè)包含各種任務(wù)(Task)的容器。這些任務(wù)之間可以通過各種優(yōu)先級(jí)約束(成功,失敗,完成)鏈接以實(shí)現(xiàn)順序序執(zhí)行。任務(wù)之間也可以不使用任何優(yōu)先級(jí)約束,這樣的任務(wù)對(duì)其他的任務(wù)沒有依賴或者不被別的任務(wù)依賴,他們可以平行執(zhí)行。常見的任務(wù)有Execute SQL Task和Data Flow Task。
控制流中可以使用容器(Containers)來包含和組織任務(wù)。常見的容器有For Loop容器,F(xiàn)oreach容器 和 Sequence容器。
下圖包含了一個(gè)順序執(zhí)行的任務(wù)和一個(gè)與之平行任務(wù)。

數(shù)據(jù)流 - Data Flow
數(shù)據(jù)流是以數(shù)據(jù)為導(dǎo)向的數(shù)據(jù)流任務(wù)(Data Flow Task)的具體實(shí)現(xiàn)。數(shù)據(jù)流通常包含數(shù)據(jù)源(Source)、轉(zhuǎn)換(Transform)和目的地(Destination)。在一個(gè)數(shù)據(jù)流中數(shù)據(jù)從數(shù)據(jù)源采集,經(jīng)過轉(zhuǎn)換(矯正、分離、合并)并最終到達(dá)目的地。雖然所有的數(shù)據(jù)都是按照這個(gè)過程(依賴于設(shè)計(jì))處理,但是整個(gè)過程中每條數(shù)據(jù)之間是并行執(zhí)行的關(guān)系。比如***條數(shù)據(jù)已經(jīng)在轉(zhuǎn)換了,第二條數(shù)據(jù)才剛剛被采集到。
下圖說明了一個(gè)從不同的數(shù)據(jù)源采集數(shù)據(jù)并處理到不同的目的地的數(shù)據(jù)流。

參數(shù) - Parameters
SSIS中參數(shù)分為項(xiàng)目(Project)參數(shù)和包(Package)參數(shù)。
項(xiàng)目參數(shù)可用于向項(xiàng)目中的一個(gè)或多個(gè)包提供項(xiàng)目接收的任何外部輸入。通常定義一些基本的數(shù)據(jù),比如數(shù)據(jù)庫連接字符串,服務(wù)器連接字符串。
包參數(shù)可以用于給一個(gè)包提供接收的外部輸入。通常定義一些包級(jí)別特定的數(shù)據(jù),比如包處理的篩選條件,數(shù)據(jù)源所在的文件夾等。
使用參數(shù)可以實(shí)現(xiàn)快速的執(zhí)行和部署包或者整個(gè)項(xiàng)目。但是如果是要部署單個(gè)的包,則盡量避免使用參數(shù)而應(yīng)該使用配置。
下圖列出了一些項(xiàng)目級(jí)別的參數(shù)。

事件處理程序 - Event Handlers
在運(yùn)行時(shí),可執(zhí)行文件(包以及 Foreach 循環(huán)容器、For 循環(huán)容器、序列容器和任務(wù)宿主容器)會(huì)引發(fā)事件。 例如,錯(cuò)誤發(fā)生時(shí)會(huì)引發(fā) OnError 事件。 可以為這些事件創(chuàng)建自定義事件處理程序,以擴(kuò)展包的功能并使包在運(yùn)行時(shí)更容易管理。 事件處理程序可以執(zhí)行諸如下列任務(wù):
當(dāng)包或任務(wù)運(yùn)行完成時(shí)清除臨時(shí)數(shù)據(jù)存儲(chǔ)。
在包運(yùn)行前檢索系統(tǒng)信息,以便評(píng)估資源可用性。
在引用表中的查找失敗時(shí)刷新表中的數(shù)據(jù)。
當(dāng)發(fā)生錯(cuò)誤或警告時(shí),或者當(dāng)任務(wù)失敗時(shí),發(fā)送電子郵件。
如果事件沒有事件處理程序,則將該事件提升到包中容器層次結(jié)構(gòu)中的上一級(jí)容器。 如果此容器具有事件處理程序,則該事件處理程序當(dāng)事件發(fā)生時(shí)運(yùn)行。 如果沒有,則將該事件提升到容器層次結(jié)構(gòu)中的上一級(jí)容器。
下圖列出了所有可用的事件處理程序。

變量 - Variables
變量是在包內(nèi)部使用的作為控制或者傳遞的信息。每個(gè)變量都有自己的作用域(Scope),父容器級(jí)別的變量可以被子容器使用,子容器級(jí)別的變量對(duì)父容器不可見。
SSIS中的變量分為系統(tǒng)變量和用戶變量。系統(tǒng)變量是系統(tǒng)內(nèi)置的,對(duì)用戶來說是只讀的。用戶定義變量由包開發(fā)人員定義,可以使用參數(shù)、配置信息、表達(dá)式和常量來賦值。通過設(shè)置用戶變量的只讀屬性(ReadOnly)讓變量不可修改。
日志 - Loggin
SSIS中通過配置包的日志,可以詳細(xì)記錄包以及內(nèi)部任務(wù)的運(yùn)行時(shí)信息。可以為包內(nèi)的任何可執(zhí)行文件()任務(wù)記錄日志,日志的內(nèi)容包括各種事件及時(shí)間的屬性。可以為一個(gè)包定義多個(gè)日志類型。例如可以為同一個(gè)包指定Text Files和SQL Server級(jí)別的日志記錄,一旦SQL Server出現(xiàn)問題,Text Files記錄的日志可以很好的幫助我們?cè)\斷出錯(cuò)信息。使用SQL Server類型的日志記錄會(huì)在數(shù)據(jù)庫的系統(tǒng)表中創(chuàng)建一張sysssislog的表。該表記錄了包執(zhí)行的ID,任務(wù)的執(zhí)行ID,起止時(shí)間及狀態(tài)信息。
包配置 - Package Configurations
包配置在SSIS 2012之前的版本中非常重要,在SSIS 2012的版本中使用包級(jí)別部署的時(shí)候也非常有用(包配置可用于包部署模型。 對(duì)于項(xiàng)目部署模型,參數(shù)用于代替配置。)
包配置具有下列優(yōu)點(diǎn):
使用配置可以更輕松地將包從開發(fā)環(huán)境轉(zhuǎn)移到生產(chǎn)環(huán)境中。 例如,配置可以更新源文件的路徑,或者更改數(shù)據(jù)庫或服務(wù)器的名稱。
將包部署到多臺(tái)不同的服務(wù)器時(shí),配置非常有用。 例如,用于每個(gè)已部署包的配置中的變量可以包含不同的磁盤空間,并且如果可用磁盤空間不滿足此值,包將不會(huì)運(yùn)行。
配置可以使包更加靈活。 例如,配置可以更新在屬性表達(dá)式中使用的變量的值。
Integration Services 支持幾種不同的存儲(chǔ)包配置(例如 XML 文件、SQL Server 數(shù)據(jù)庫中的表以及環(huán)境變量和包變量)的方法。
每個(gè)配置都是一個(gè)屬性/值對(duì)。 XML 配置文件和 SQL Server 配置類型可以包括多個(gè)配置。
在創(chuàng)建用于安裝包的包部署實(shí)用工具時(shí)將會(huì)包括這些配置。 在安裝包時(shí),可以在安裝包的過程中更新配置。
Integration Services 提供了直接配置和間接配置。 如果直接指定配置,Integration Services 會(huì)在配置項(xiàng)和包對(duì)象屬性之間創(chuàng)建直接鏈接。 如果源的位置不更改,則直接配置是較好的選擇。 間接配置使用環(huán)境變量。 配置不直接指定配置設(shè)置,而是指向環(huán)境變量,環(huán)境變量又包含配置值。 如果對(duì)于包的每個(gè)部署,配置的位置都可以更改,則使用間接配置是較好的選擇。例如,在數(shù)據(jù)庫中直接指定包級(jí)別的配置,而在環(huán)境變量中(或者XML、參數(shù))中簡(jiǎn)介指定包級(jí)別配置所在的數(shù)據(jù)庫。SSIS在執(zhí)行時(shí),首先加載環(huán)境變量(直接配置),通過直接配置找到包級(jí)別的配置信息(間接配置)并加載運(yùn)行。
包瀏覽器 - Package Explorer
包瀏覽器包含了整個(gè)包里面的所有內(nèi)容,并且以折疊數(shù)的方式展現(xiàn),通過包瀏覽器可以快速的找到并定位包級(jí)別的任何元素(可執(zhí)行文件、條件表達(dá)式、參數(shù)、事件處理程序、變量、連接管理器以及日志)。
總結(jié)
本文介紹了微軟SSIS的基本概念,希望能夠幫助初學(xué)SSIS的開發(fā)者更好的理解SSIS。