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