SSIS高級轉換任務—模糊分組
在模糊查找中我們提到臟數據是怎樣進入到表中的事情,主要還是由于一些“Lazy-add”造成的。這種情況我們的肉眼很容易被欺騙,看上去是同一個單詞,其實就差那么一個字母,變成了兩個不同的單詞。一個簡單的例子是X-Ray Tech和xRey,我們很有可能認為他們是同一個職務,CT操作員,但是如果讓計算機來處理的話,它們是兩種截然不同的東西。
和模糊查找一樣,模糊分組可以查找出多行中出現的類似的單詞進行歸類。我們可以使用這些歸類得到的結果清洗數據源或者在不修改基礎數據的情況下對原表進行修改。模糊分組也需要一個輸入字符流,還需要一個OLE DB數據連接,用于存放分析得到的結果。
模糊分組任務的編輯界面有下面三個標簽
- 連接管理:這個標簽用來設置OLE DB連接,在這個連接的數據庫中存放分組結果,這個標簽和前面提到的是一樣的效果
- 列:這個標簽顯示輸入流中的列,在這里需要選擇一些需要進行模糊分組的列,如圖1。每一個被選中的列將會被分析,產生一些新的結果列。如果沒有選擇的話,這些列將會被標記為PassThrow列,意思是不進行模糊分組,直接將導出到輸出流中。在這里也可以根據自己的意愿修改Group Output Alias,Output Alias,CleanMatch和Similarity Alias的名字。Numerals選項,如圖2,這個選項有前導,后導,前導和后導,不用前導后導,四個選項。在對類似地址的一些數據進行模糊分組的時候這個選項會很有用。最后有一個Comparison flags選項可以設置忽略大小寫,忽略符號等設置。

圖1
圖2
- 高級:這個標簽選項中可以設置與模糊分組算法有關的選項。在這里可以修改將要派生的三個列的列名,默認情況下它們分別是“_key_out”,“_key_in”,“_score”。下面的Similarity threshold可以控制相似度,默認的值是0.5。分隔符選項中可以設置忽略輸入字符流中的“.”或空字符等,默認情況下會忽略所有常見字符。如圖3。

圖3
下面我們做一個例子來說明模糊分組的用法。假設人事部門在輸入每個員工的職位信息的時候會有一些筆誤,這里我們使用模糊分組來得到最標準的職位名稱和每個員工的職位和這個標準的名稱的相似度。
- 創建一個package命名為FuzzlyGroupExample.dtsx,在Control Flow界面中拖放一個Data Flow任務,雙擊進入Data Flow界面
- 下載下面的txt文件,命名為empdata.txt,存放在一個本地路徑里。下載文件
- 3. 添加一個平面文件連接,命名為EmployeeData,連接上面創建的txt文件。設置Format屬性為Ragged Right,設置第一行為列名,點擊列邊界分別在第5個字符和第28個字符處點擊放置兩個分割線如圖4。點擊高級標簽設置TITLE的OutputColumnWidth為50,保存連接。

圖4 - 添加一個在Data Flow中拖放一個平面文件數據源,連接路徑設置為上述文件。添加一個OLE DB數據目的。
- 打開OLE DB數據目的,創建一個連接,連接本地AdventureWorkers數據庫。
- 添加一個模糊分組任務,作為平面文件數據源和OLE DB數據目的的中間任務連接起來。
- 如上圖1,選擇TITLE列作為輸入列,其他選項默認。
- 在高級標簽界面中,選擇相似度為默認0.5,這里都默認設置選項。
- 打開OLE DB數據目的,點擊Name of Table or View,創建一個新的表,命名為[FuzzyGrouping],點擊Mapping標簽,保留默認設置。
- 在模糊分組任務和數據目的之間添加一個DataViewer,選擇類型為grid。運行這個package,DataViewer如圖5。 最后運行解雇如圖6。

圖5
圖6
最后我們查看結果EXECUTIVE VICE PRESIDEN,EXEC VP, FLDS OPS MGR , FIELDS OPERATIONS MANAG, X-RAY TECH被認為是標準數據,其他數據和他們做模糊比較。如圖7。

圖7
作者:Tyler Ning
出處:http://www.rzrgm.cn/tylerdonet/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,如有問題,請微信聯系冬天里的一把火
浙公網安備 33010602011771號