SSIS中的容器和數據流—數據轉換續
在上一篇隨筆中列舉了部分Data Flow中的數據轉換任務,這里繼續剩余的轉換任務。
數據挖掘請求
數據挖掘任務是SSIS中一個很重要的任務,它的思想來源于一些算法。數據挖掘請求運行數據挖掘請求,并將結果輸出到數據流。它還可以添加一些預測新列,一些應用場合如下列舉:
- 根據已知的一些列,例如子女個數,家庭收入,配偶收入預測產生一個新列:這個人是否擁有住房
- 根據客戶購物卡預測客戶的購買意向
- 可以填充用戶的調查問卷上沒有填寫的空白欄
涉及到的算法有:
- 微軟時序算法
- 微軟決策樹算法
- 微軟線性回歸算法
- 貝葉斯算法
模糊排序和查找
模糊排序task可以找出數據中可能重復的行,例如可以找出包含“Main St.”和“Main Street”的兩行然后將他們合并成一行。模糊查找任務可以檢查數據輸入并清除臟數據。模糊查找任務通常放在查找任務之后,查找任務找到匹配數據,然后通過模糊查找沒有匹配的數據。
查找
查找轉換任務的功能類似于SQL Server 2000中的Data Pump任務。例如,如果數據中有一列ZipCode來自于導入數據中的兩列State和City,在映射表中可以使用查找轉換。在SQL Server 2000中這種功能很笨拙,必須使用join關聯查找這樣會使運行速度減慢。如圖4-25是查找任務的編輯界面。
圖4-25
合并
合并轉換可以將兩個路徑中的輸入數據合并成一個輸出。這種轉換類似于Union All轉換,它有一些限制:
- 合并之前數據必須排序,可以在此之前使用排序轉換或者在數據源中使用ORDER BY語句
- 合并的元數據類型必須相同,例如CustomerID不能在一個路徑中是數字型的但是在另一個路徑中是字符類型的
- 如果有多于兩個路徑,需要選擇Union All轉換
編輯這種task,確保在兩個路徑中的數據時一致的,選擇列的時候會彈出對話框提示數據合并到路徑1還是路徑2,如果選擇合并到路徑1,然后連接路徑2。這樣選擇之后如圖4-26最終將會從一個路徑映射到另一個路徑,有些路徑的數據也可以忽略。
圖4-26
連接合并
SSIS的一個目標就是使用任務,盡量保證不寫任何代碼,一個典型的例子就是連接合并。這種合并可以將兩個輸入進行內連接或者外連接然后選擇性地輸出。例如,在一個數據流中存儲著包含EmployeeID的人力資源信息,在另一個數據流中存儲著工資清單信息,可以對這兩個路徑進行連接,從人力資源信息中取得姓名,從工資清單信息中取得員工工資,然后從一個路徑中輸出。如圖4-27,可以看到通過連接合并分別缺的員工名字和入職日期。
圖4-27
注意:如果兩個輸入路徑在同一個數據庫,在OLE DB數據源中進行數據連接操作可能效率更高,如果在不同的數據庫中可能效率后受到影響。這種連接合并在兩個數據不是同一個數據庫中或者不想編寫代碼時會很有用。
多點傳送Multicast
如同它的名字一樣多點傳送可以將一個路徑中的數據輸出到多個路徑,如圖4-28你可能會使用這種轉換將數據輸出到多個路徑中。編輯這種task,將它和輸入源連接,然后將它和多個Destination連接,除了task的名字之外,它沒有特別的編輯選項。
圖4-28
注意:多點傳送類似于Split 轉換,不同的是多點傳送把所有的行都輸出,Split將有條件地輸出部分行。
OLE DB命令
OLE DB命令對數據流中的數據行執行一個OLE DB命令。它針對數據表中的每一行進行更新操作,可以事先將要更新的數據存放在表中。或者針對一個有輸入參數的存儲過程,可以將這些參數存放在一個數據表中,不用每次都輸入參數。
百分比抽樣和行抽樣Percentage and Row Sampling
百分比抽樣和行抽樣可以從數據源中隨機選擇一組數據。這兩種task都可以產生兩組輸出,一組是隨機選擇的,另一組是沒有被選擇的。可以將這些選擇出的數據發送到開發或者測試服務器上。這個Task的最合適的應用是建立數據挖掘模型然后,使用這些抽樣數據來驗證這個模型。
編輯這種task,選擇要抽取的行數或者 百分比,如圖4-29。百分比抽樣按百分比從數據源中隨機選擇數據,行抽樣從數據源中隨機選擇具體的行數。可以對選中的數據和未被選擇的數據命名。***一個選擇項是隨機取樣的參數。如果選擇一個固定的參數,每次輸出的結果是一樣的,如果保持默認設置,就是不選擇,每次將輸出不同的數據。
圖4-29
透視和逆透視
這個和T-SQL中的PIVOT和UNPIVOT的作用是一樣的。數據透視轉換可以將數據規范或使它在報表中更具可讀性。數據的輸出類似于OLAP中的數據輸出和報表服務中的數據輸出。下面的 表展示銷售員工和每天的銷售量。
轉換后的數據如圖
逆透視數據的功能和這個剛好相反。
數據行數
數據行數轉換只是簡單地計算數據流中的數據行數然后輸出到一個變量中。常用的是將行數寫到郵件中,然后將郵件發送給使用者報告轉換了多少行數據。或者根據這個數據行數進行判斷,進而進行相應的操作。
代碼組件
代碼組件允許編寫代碼充當轉換transforms,數據源source,目的destination。使用代碼組件可以完成下面的任務:
- 使用.net類庫集驗證保險卡號和郵件地址
- 驗證數據并忽略掉不合理的數據。例如,在人力資源招聘系統中刪除那些不符合薪水要求的應聘者
- 編寫組件和第三方客戶整合
代碼組件可以作為多種輸出的數據源,可以選擇在運行時更加高效地編譯。
代碼組件允許編寫代碼充當轉換transforms,數據源source,目的destination。使用代碼組件可以完成下面的任務:
- 使用.net類庫集中的Regex類驗證保險卡號和郵件地址
- 驗證數據并忽略掉不合理的數據。例如,在人力資源招聘系統中刪除那些不符合薪水要求的應聘者
- 編寫組件和第三方客戶整合
代碼組件可以作為多種輸出的數據源,可以選擇在運行時更加高效地編譯。
漸變維度(Slow Change Dimesion)
Dimension修改可以更新或者修改數據倉庫中的一個Dimension。使用修改向導,可以產生所有的更新和新建dimension任務。曾經這樣的任務對于DTS開發人員來說是很繁瑣的,現在只需要幾分鐘就可以完成。
排序
排序轉換允許對數據流中的數據按照某一列進行排序。這是五個常用的轉換之一。連接數據源打開編輯界面,編輯這種任務。不想設置為排序列的字段不要選中,默認情況下所有列都會選中。如圖4-30,按照ProductID排序,并將所有列輸出。
圖4-30
在底部的表格中,可以設置輸出列的別名,是否按照列來排序。Sort Order列顯示列將會***排序,第二排序還是第三排序。雙擊列去除重復的排序列。
關鍵詞抽取和查找Term Extraction and Lookup
關鍵詞抽取和查找從數據集中抽取關鍵詞。例如,可以使用這種task從一系列文章中抽取關鍵詞。另一個功能是分析公司內部電子郵件內容。這種任務目前只支持英文關鍵詞抽取。
在關鍵詞抽取中可以指定是抽取名詞還是名詞詞組。例如“bicycle”會被抽取但是“the bicycle”將不會被抽取。這種任務有兩種輸出,關鍵詞和抽取的結果。關鍵詞是要匹配的關鍵詞,抽取結果是成功匹配的次數。
關鍵詞抽取可以輸出預先匹配的行。例如,將一個郵件系統中的信息記錄到數據庫中,可以和郵件系統組合,自動記錄有瑕疵的產品。將結果通過一個連接管理器指向一個表。
聯合所有Union All
聯合所有task的功能和合并正好相反,它將多個數據源中的合并成一個結果集。例如,如圖4-31,將兩個XML數據源中的數據合并成一個輸出然后將數據送入到關鍵詞抽取任務中。
圖4-31
編輯這種轉換,首先將***個數據源連接到task然后將其他數據源連接到這個task。打開編輯界面,保證列被正確映射,DDIS將會自動適應是否正確映射。例如,一個輸入字符是20個字符,另一個是50,出書將會是一個多于50個字符的列。
下一篇隨筆中,將用一個例子來具體說明怎么使用轉換任務。
原文鏈接:http://www.cnblogs.com/tylerdonet/archive/2011/04/12/2013959.html
【編輯推薦】
- SSIS中的容器和數據流—數據轉換
- MySQL數據庫的優化(上)單機MySQL數據庫的優化
- MySQL數據庫的優化(下)MySQL數據庫的高可用架構方案
- 利用keepalived構建高可用MySQL-HA
- 給數據減肥 讓MySQL數據庫跑的更快