複製鏈接
請複製以下鏈接發送給好友

SSIS

鎖定
SSIS是Microsoft SQL Server Integration Services的簡稱,是生成高性能數據集成解決方案(包括數據倉庫的提取、轉換和加載 (ETL) 包)的平台。
中文名
SSIS
外文名
Microsoft SQL Server Integration Services
屬    性
是生成高性能數據集成解決方案
包    括
用於生成和調試包的圖形工具嚮導

SSIS構成

Integration Services 包括用於生成和調試包的圖形工具和嚮導;用於執行工作流函數(如 FTP 操作)、執行 SQL 語句或發送電子郵件的任務;用於提取和加載數據的數據源和目標;用於清理、聚合、合併和複製數據的轉換;用於管理 Integration Services 的管理服務 Integration Services 服務;以及用於對 Integration Services 對象模型編程的應用程序編程接口 (API)。

SSIS發展

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處理大數據集和基於腳本工具的內在侷限時也遇到了一些挫折。那時正是創建真正的企業繼承工具的時候。 [1] 

SSIS特色

可視化環境
熟悉了SSIS的可視化操作後,給你的感覺應該是震撼的,因為幾乎你所能想得到的ETL操作都能通過簡單拖拽控件加以實現 [2] 
主要得益於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基本的可執行單位)程序調用。

SSIS功能

SQL Server Integration Services (SSIS) 提供一系列支持業務應用程序開發的內置任務、容器、轉換和數據適配器。您無需編寫一行代碼,就可以創建 SSIS 解決方案來使用 ETL 和商業智能解決複雜的業務問題,管理 SQL Server 數據庫以及在 SQL Server 實例之間複製 SQL Server 對象。

SSIS功能擴展

SSIS SSIS
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操作來處理時,這種方法是非常有用的。 [3] 

SSIS典型用途

下列情況説明了 SSIS 包的典型用途。
合併來自異類數據存儲區的數據
數據通常存儲在很多個不同的數據存儲系統中,從所有源中提取數據並將其合併到單個一致的數據集中確實有一定的難度。這種情況的出現有多個原因。例如:
許多單位要對存儲在早期數據存儲系統中的信息進行歸檔。這些數據在日常操作中可能不重要,但對於需要收集過去很長一段時間內的數據的趨勢分析來説很重要。
單位的各個部門可能會使用不同的數據存儲技術來存儲操作數據。包可能需要先從電子表格以及關係數據庫中提取數據,然後才能合併數據
數據可能存儲在對相同數據使用不同架構的數據庫中。包可能需要先更改列的數據類型或將多個列的數據組合到一列中,然後才能合併數據。
Integration Services 可以連接到各種各樣的數據源,包括單個包中的多個源。包可以使用 .NETOLE 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 包
參考資料