1 SSIS介紹 SSIS首先是在1997年的SQL Server 7.0中引入的,當時它的名稱為數(shù)據(jù)轉(zhuǎn)換服務(wù)(DTS)。SSIS屬于ETL產(chǎn)品家族,ETL代表提取(Extraction)、轉(zhuǎn)換(Transformation)和加載(Loading)。 現(xiàn)在,越來越多的企業(yè)都有數(shù)據(jù)倉庫。ETL是將來自O(shè)LTP數(shù)據(jù)庫的數(shù)據(jù)定期加載到數(shù)據(jù)倉庫中必不可少的工具。在SQL Server的前兩個版本—— SQL Server 7.0和SQL Server 2000中,SSIS主要集中于提取和加載。通過使用SSIS,可以從任何數(shù)據(jù)源中提取數(shù)據(jù)以及將數(shù)據(jù)加載到任何數(shù)據(jù)源中。在SQL Server 2005中,對SSIS進行了重新設(shè)計和改進。SSIS提供控制流和數(shù)據(jù)流??刂屏饕卜Q為工作流或者任務(wù)流,它更像工作流,在工作流中每個組件都是一個任 務(wù)。這些任務(wù)是按預(yù)定義的順序執(zhí)行的。在任務(wù)流中可能有分支。當前任務(wù)的執(zhí)行結(jié)果決定沿哪條分支前進。 數(shù)據(jù)流是新的概念。數(shù)據(jù)流也稱為流水線,主要解決數(shù)據(jù)轉(zhuǎn)換的問題。數(shù)據(jù)流由一組預(yù)定義的轉(zhuǎn)換操作組成。數(shù)據(jù)流的起點通常是數(shù)據(jù)源(源表);數(shù)據(jù)流的 終點通常是數(shù)據(jù)的目的地(目標表)??梢詫?shù)據(jù)流的執(zhí)行認為是一個流水線的過程,在該過程中,每一行數(shù)據(jù)都是裝配線中需要處理的零件,而每一個轉(zhuǎn)換都是裝 配線中的處理單元。 包(package)是SSIS項目中基本的部署和執(zhí)行單元。SSIS任務(wù)執(zhí)行的所有工作都發(fā)生在包的上下文中。SSIS包是SSIS流的容器???以通過以下方式來創(chuàng)建SSIS包:在Integration Services項目文件夾中右擊“SSIS包”文件夾,然后選擇“新建SSIS包”菜單項。 SSIS項目可以包含多個包。包只包含一個控制流,而該控制流可以包含一個或者多個數(shù)據(jù)流。 除了控制流和數(shù)據(jù)流,包還包含了SSIS連接和包的變量??梢杂胁煌饔糜虻淖兞?,例如,作用域為整個包的全局變量或者作用域為任務(wù)序列的局部變量。 在托盤中顯示了連接和變量,如SSIS設(shè)計器底部所示(參見圖12-1)。連接可以連向關(guān)系數(shù)據(jù)庫,也可以連向Analysis Services數(shù)據(jù)庫。 3 任務(wù)流 SSIS包包含一個控制流,該控制流由一組任務(wù)組成。這些任務(wù)定義了包的工作,例如,加載數(shù)據(jù)、執(zhí)行SQL語句、處理腳本或者調(diào)用其他過程。在工具箱中列出了這些任務(wù)??梢酝ㄟ^以下方式將任務(wù)加入包中:從工具箱中拖動該任務(wù),然后將它釋放到包的設(shè)計器中。 在任務(wù)流中,包通常包含多個任務(wù)。多個任務(wù)是按優(yōu)先權(quán)約束的順序來進行組織的。優(yōu)先權(quán)約束按以下順序連接兩個任務(wù):執(zhí)行第一個任務(wù)的結(jié)果決定是否運行第二個任務(wù)??梢栽诠ぷ髁髦惺褂脙?yōu)先權(quán)約束來創(chuàng)建條件分支??梢詫⒍鄠€優(yōu)先權(quán)約束進行組合,然后將其作為一個約束來求值。 3.1 在SSIS中的標準任務(wù) 先面列出了SSIS任務(wù)流中的一些預(yù)構(gòu)建的任務(wù)及其描述信息。 除了在以下所列出的任務(wù)之外,SSIS還提供了簡單的API,可以使用這些API來開發(fā)自己的任務(wù)。一旦注冊了任務(wù),則在工具箱中將會出現(xiàn)這些任務(wù),然后可以在任務(wù)流中像所有預(yù)構(gòu)建的任務(wù)一樣使用這些任務(wù)。 大容量插入任務(wù)——將來自文本文件的大量數(shù)據(jù)加載到SQL Server表中 3.2 容器 容器(container)是向包提供結(jié)構(gòu)的SSIS對象。每個包都有一個容器,用來存儲包的流。包的容器可以包含其他類型的容器,例如序列容器、 Foreach循環(huán)容器和For循環(huán)容器,這些容器都可以在控制流工具箱中獲得??梢栽谶@些容器中定義子流。容器豐富了控制流的運行時執(zhí)行模型。例如,并 不是所有的任務(wù)都是順序執(zhí)行的。在Foreach循環(huán)容器內(nèi)部的子流將會基于容器中定義的迭代器而多次執(zhí)行。 3.3 調(diào)試 對SSIS控制流進行調(diào)試是在SQL Server 2005中引入的新特性。當在設(shè)計器中選擇了一個任務(wù)時,只要按下F9就可以設(shè)置斷點。通過調(diào)試,可以在執(zhí)行期間檢查包的變量的值以及任務(wù)的狀態(tài)。斷點可 以基于事件來設(shè)置。例如,可以基于一個任務(wù)的以下事件來設(shè)置一個或者多個斷點: ● OnPreExecute 當SSIS的運行時遇到了一個斷點事件時,SSIS的運行時會在包的執(zhí)行期間暫停。這與在Visual Studio中調(diào)試C#代碼類似。 3.4 研究一個控制流示例 下圖顯示了一個簡單的控制流示例。它以FTP任務(wù)開始,該FTP任務(wù)用于下載已壓縮的數(shù)據(jù)文件。一旦下載完這些文件,運行時就會到達Foreach 循環(huán)容器,在該容器內(nèi)部有兩個任務(wù):執(zhí)行進程任務(wù)(該任務(wù)調(diào)用unzip應(yīng)用程序來解壓縮數(shù)據(jù)文件)和大容量插入任務(wù)(該任務(wù)將數(shù)據(jù)文件的數(shù)據(jù)插入到 SQL Server中)。當解壓縮完數(shù)據(jù)文件并且將數(shù)據(jù)文件的數(shù)據(jù)加載到SQL Server中時,循環(huán)會停止。如果在循環(huán)期間發(fā)生了錯誤,則該控制流將執(zhí)行發(fā)送郵件任務(wù):向DBA發(fā)送電子郵件。如果正確地執(zhí)行了每個任務(wù),則該控制流 將執(zhí)行SQL任務(wù):在新的數(shù)據(jù)集上創(chuàng)建一些視圖。斷點是在執(zhí)行SQL任務(wù)的OnPreExecute事件上設(shè)置的,以便DBA在創(chuàng)建視圖前可以對數(shù)據(jù)加以 驗證。 4. 數(shù)據(jù)流 控制流是出現(xiàn)較早的概念,因為它從SSIS的第一個版本開始就已經(jīng)存在了,而數(shù)據(jù)流是在SQL Server 2005中才引入的新概念。數(shù)據(jù)流是專門處理數(shù)據(jù)操作的工作流。 數(shù)據(jù)流也稱為流水線??梢詫?shù)據(jù)流認為是裝配線,該裝配線包含了順序執(zhí)行的多個操作。在數(shù)據(jù)流中的每個節(jié)點都稱為轉(zhuǎn)換。數(shù)據(jù)流通常以源轉(zhuǎn)換開始,以 目標轉(zhuǎn)換結(jié)束。在這兩個轉(zhuǎn)換之間,預(yù)定義的數(shù)據(jù)流轉(zhuǎn)換被依序應(yīng)用到數(shù)據(jù)上。一些轉(zhuǎn)換是同步的,例如,查找、條件性拆分和數(shù)據(jù)轉(zhuǎn)換。這些同步的轉(zhuǎn)換可以并行 執(zhí)行。 一旦已經(jīng)將轉(zhuǎn)換應(yīng)用到數(shù)據(jù)行上,則下一個轉(zhuǎn)換可以開始處理該數(shù)據(jù)行,而無需等到上一級轉(zhuǎn)換處理完整個數(shù)據(jù)集。一些轉(zhuǎn)換是異步的,例如聚合和排序。這些轉(zhuǎn)換必須從前面的輸出中獲得所有的行,從而可以處理和產(chǎn)生輸出,用于后續(xù)轉(zhuǎn)換。 除了預(yù)構(gòu)建的轉(zhuǎn)換清單,SSIS還提供了一些API,可以使用這些API來構(gòu)建自己的數(shù)據(jù)流轉(zhuǎn)換。例如,可以構(gòu)建Numeric Processing轉(zhuǎn)換來將數(shù)學計算和轉(zhuǎn)換應(yīng)用到流水線數(shù)據(jù)上。 數(shù)據(jù)流總是包含于任務(wù)流中。有一個特殊的任務(wù),其名稱為數(shù)據(jù)流任務(wù),該任務(wù)是用于容納數(shù)據(jù)流的容器。在構(gòu)建數(shù)據(jù)流之前,必須將數(shù)據(jù)流任務(wù)加入到設(shè)計器中。 4.1 轉(zhuǎn)換 任務(wù)是任務(wù)流的基本組件,而轉(zhuǎn)換是數(shù)據(jù)流的基本組件。轉(zhuǎn)換是預(yù)定義的數(shù)據(jù)操作??梢詫⑥D(zhuǎn)換視為裝配線中的機器,用于對輸入數(shù)據(jù)進行操作。表12-2顯示了在SSIS數(shù)據(jù)流環(huán)境中流行的轉(zhuǎn)換列表。 SSIS的轉(zhuǎn)換 “聚合”轉(zhuǎn)換——執(zhí)行聚集,例如average、sum和count 4.2 查看器 查看器是為了調(diào)試數(shù)據(jù)流而設(shè)計的??梢栽趫?zhí)行期間使用查看器來查看流水線中的流??梢詫⒉榭雌鞲郊釉谵D(zhuǎn)換之間的連線上。要增加查看器,可以在連線上 右擊,然后選擇“數(shù)據(jù)查看器”菜單項。默認的查看器是網(wǎng)格圖。也可以增加直方圖,散點圖和圓柱圖作為圖形查看器。如果這些預(yù)定義的查看器還不能滿足您的需 求,則您甚至可以構(gòu)建自己的查看器。 4.3 研究一個數(shù)據(jù)流示例 圖12-3顯示了一個數(shù)據(jù)流的示例。該數(shù)據(jù)流以O(shè)LE DB Source轉(zhuǎn)換開始,該轉(zhuǎn)換加載包含零售銷售事務(wù)的事實表。第二個轉(zhuǎn)換是“查找”,該轉(zhuǎn)換從客戶維表中查找客戶姓名中的名和姓。這兩列被加入到流水線的 數(shù)據(jù)中。下一個轉(zhuǎn)換是“派生列”,該轉(zhuǎn)換基于姓名中的名和姓來創(chuàng)建新的Full Name列。然后,數(shù)據(jù)到達“聚合”轉(zhuǎn)換,該轉(zhuǎn)換累加每個客戶的總銷售額?;阡N售額,“條件性拆分”轉(zhuǎn)換將客戶拆分為兩個目標表:一個表對應(yīng)重要的客 戶,而另一個表對應(yīng)普通的客戶。 5. 在SSIS環(huán)境中進行數(shù)據(jù)挖掘 SSIS提供了流的環(huán)境,在該環(huán)境中可以通過一組內(nèi)置的任務(wù)和轉(zhuǎn)換來進行數(shù)據(jù)提取、加載和轉(zhuǎn)換。 正如您已經(jīng)學習的,在數(shù)據(jù)挖掘項目中最消耗資源的工作是數(shù)據(jù)清理和轉(zhuǎn)換。SSIS自然可以作為數(shù)據(jù)挖掘項目很好的補充??梢允褂眠@個強大的工具來從 不同的源中加載數(shù)據(jù),將這些數(shù)據(jù)連接在一起,規(guī)范化列的值,移除無用的記錄,替換缺失值,以及將數(shù)據(jù)分成訓練數(shù)據(jù)集和測試數(shù)據(jù)集等。 SSIS不僅僅作為數(shù)據(jù)挖掘的ETL工具,SSIS實際上還在控制流和數(shù)據(jù)流環(huán)境中提供了一些內(nèi)置的數(shù)據(jù)挖掘組件。特別地,在下表中列出了一些專門用于數(shù)據(jù)挖掘的任務(wù)和轉(zhuǎn)換。 用于數(shù)據(jù)挖掘的任務(wù)和轉(zhuǎn)換 數(shù)據(jù)挖掘查詢?nèi)蝿?wù)——基于數(shù)據(jù)挖掘模型來運行預(yù)測查詢 5.1 數(shù)據(jù)挖掘任務(wù) 5.1.1 數(shù)據(jù)挖掘查詢?nèi)蝿?wù) 數(shù)據(jù)挖掘查詢?nèi)蝿?wù)用于執(zhí)行數(shù)據(jù)挖掘的查詢,主要是執(zhí)行SSIS控制流中的預(yù)測查詢。 下圖顯示了對話框的“挖掘模型”選項卡,該對話框用于編輯數(shù)據(jù)挖掘查詢?nèi)蝿?wù)的屬性。在該選項卡中,首先將連接指定到活躍的Analysis Services數(shù)據(jù)庫。然后必須指定查詢所基于的挖掘結(jié)構(gòu)和挖掘模型。 下圖顯示了數(shù)據(jù)挖掘查詢?nèi)蝿?wù)的“查詢”選項卡。在該選項卡中,必須輸入數(shù)據(jù)挖掘查詢語句。可以直接在文本框中編寫查詢語句,也可以單擊“生成新查 詢”按鈕來調(diào)用預(yù)測查詢生成器。預(yù)測查詢生成器提供了圖形化的環(huán)境,在該環(huán)境中可以構(gòu)建DMX查詢。在第3章中已經(jīng)學習了如何使用該工具。 DMX查詢可以包含一些參數(shù)。這些參數(shù)可以映射到SSIS變量。例如,您可能希望編寫一個查詢來返回一些客戶,這些客戶擁有黃金會員卡的概率超過給定的值。該給定的值可以通過SSIS變量Probability來設(shè)置。 “結(jié)果集”選項卡提供了一個選項,該選項可用于將查詢返回的結(jié)果映射到一個SSIS變量,比如一個集合變量。 下圖顯示了數(shù)據(jù)挖掘查詢?nèi)蝿?wù)的“輸出”選項卡。在這個選項卡中,可以指定連接的目標數(shù)據(jù)庫,在該目標數(shù)據(jù)庫中將保存查詢結(jié)果。它可以是與源數(shù)據(jù)相同的數(shù)據(jù)庫,也可以是不同的數(shù)據(jù)庫。您還需要對結(jié)果表進行命名。 注意: DMX查詢可以產(chǎn)生嵌套的結(jié)果,例如,如果在Select子句中使用PredictHistogram函數(shù),則數(shù)據(jù)挖掘查詢?nèi)蝿?wù)將自動平坦化嵌套行集,然后在一個表中插入查詢結(jié)果。 5.1.2 Analysis Services處理任務(wù) Analysis Services處理任務(wù)用于處理Analysis Services數(shù)據(jù)庫中的主要對象。這些對象可以是維、立方體、挖掘結(jié)構(gòu)和挖掘模型。 下圖顯示了該任務(wù)的編輯器??梢允褂谩疤砑印卑粹o來選擇對象,也可以在“處理選項”列中指定處理的選項和設(shè)置。 在預(yù)測查詢生成器中執(zhí)行DMX查詢
也可以調(diào)用存儲過程:
實際上,也可以在數(shù)據(jù)挖掘查詢?nèi)蝿?wù)中指定DMX的Creation語句和Insert Into語句。可以使用該任務(wù)來創(chuàng)建和處理挖掘模型。 5.1.3 Analysis Services執(zhí)行DDL任務(wù) DDL(數(shù)據(jù)定義語言)可以采用XML格式來描述。在Analysis Services 2005中,所有的對象(挖掘模型、挖掘列、維、立方體和角色等等)都是使用DDL來定義的(在第14章中將學習DDL的基本概念)。 除了對象的定義,DDL還包含了一組命令。這些命令使創(chuàng)建、更新、處理和刪除對象變得容易。 當使用圖形化的工具(例如挖掘模型編輯器)來創(chuàng)建挖掘模型時,這些工具會產(chǎn)生發(fā)送給服務(wù)器的DDL腳本。 如果不使用數(shù)據(jù)挖掘編輯器來創(chuàng)建/更新這些對象,則可以復(fù)制或者編寫這些DDL腳本,然后通過執(zhí)行DDL任務(wù)來執(zhí)行它們。 下圖顯示了執(zhí)行DDL任務(wù)的編輯器。首先,必須指定與Analysis Services的連接。然后單擊SourceDirect屬性,該屬性調(diào)用用來顯示DDL命令的文本框。在圖12-8中的DDL用于在 Adventure Works DW數(shù)據(jù)庫中創(chuàng)建挖掘結(jié)構(gòu)DM Customers。 5.1.4 一個使用數(shù)據(jù)挖掘的控制流示例 下圖顯示了使用數(shù)據(jù)挖掘查詢?nèi)蝿?wù)的控制流示例??刂屏魇紫韧ㄟ^FTP任務(wù)下載新客戶的數(shù)據(jù)集,然后使用大容量插入任務(wù)將數(shù)據(jù)加載到SQL Server數(shù)據(jù)庫中。如果在數(shù)據(jù)加載期間發(fā)生了錯誤,則它會向DBA發(fā)送電子郵件。如果數(shù)據(jù)加載成功,則它會執(zhí)行數(shù)據(jù)挖掘查詢?nèi)蝿?wù),該任務(wù)用于查找那些 對特殊的促銷產(chǎn)品可能感興趣的客戶。預(yù)測的結(jié)果會保存在表中。在預(yù)測之后,它會給可能感興趣的客戶發(fā)送電子郵件。 5.2 數(shù)據(jù)挖掘轉(zhuǎn)換 5.2.1 數(shù)據(jù)挖掘模型定型轉(zhuǎn)換 數(shù)據(jù)挖掘模型定型轉(zhuǎn)換(簡稱DM定型轉(zhuǎn)換)用于在數(shù)據(jù)流環(huán)境中處理挖掘結(jié)構(gòu)及其相關(guān)的挖掘模型。 Analysis Services處理任務(wù)也可以處理挖掘模型,但是必須在任務(wù)中指定輸入表。在執(zhí)行期間,AS服務(wù)器從存儲了訓練數(shù)據(jù)的源表中提取數(shù)據(jù)。然而,在數(shù)據(jù)流環(huán) 境中,DM定型轉(zhuǎn)換在執(zhí)行期間將數(shù)據(jù)從流水線推到Analysis Services。AS服務(wù)器以推的模式獲得訓練數(shù)據(jù)。在將流水線數(shù)據(jù)發(fā)送給AS服務(wù)器之前,DM定型轉(zhuǎn)換以XML行集的格式對該數(shù)據(jù)進行封裝。 下圖顯示了DM定型轉(zhuǎn)換的屬性對話框的“連接”選項卡。在該選項卡中,可以指定到AS Server數(shù)據(jù)庫的連接,然后選擇您希望使用流水線數(shù)據(jù)來處理的挖掘結(jié)構(gòu)。 也可以使用“新建”按鈕來創(chuàng)建新的挖掘結(jié)構(gòu)。單擊該按鈕后會啟動數(shù)據(jù)挖掘向?qū)?。在該向?qū)е?,對模型?chuàng)建過程的處理方式與在數(shù)據(jù)挖掘編輯器環(huán)境中的處 理方式相同。然而,還存在一些不同的地方。首先,列是來自流水線,而不是來自關(guān)系表。某些特性(例如,自動檢測內(nèi)容類型和相關(guān)建議)不可用。這是因為這些 特性需要對輸入數(shù)據(jù)進行掃描和采樣,而在流水線環(huán)境中這些操作是不可行的。 下圖顯示了DM定型轉(zhuǎn)換的“列”選項卡,在該選項卡上可以指定流水線的列和挖掘結(jié)構(gòu)的列之間的映射。在默認情況下,該工具會基于列名自動進行映射。 提示: 5.2.2 數(shù)據(jù)挖掘查詢轉(zhuǎn)換 顧名思義,數(shù)據(jù)挖掘查詢轉(zhuǎn)換(簡稱DM查詢轉(zhuǎn)換)是用于執(zhí)行數(shù)據(jù)挖掘查詢的轉(zhuǎn)換。在第2章中,已學習了不同類型的DMX查詢,包括預(yù)測、內(nèi)容、模型創(chuàng)建和模型訓練。在這些查詢中,預(yù)測查詢是最常見的。 要執(zhí)行預(yù)測查詢,需要訓練過的挖掘模型和輸入數(shù)據(jù)集。在流水線環(huán)境中,輸入數(shù)據(jù)集是從流水線推來的。DM查詢轉(zhuǎn)換將來自流水線的輸入數(shù)據(jù)封裝為 XML行集,然后通過XML/A協(xié)議將它們發(fā)送給AS服務(wù)器。AS服務(wù)器執(zhí)行查詢,然后將XML結(jié)果返回給該轉(zhuǎn)換。然后,該轉(zhuǎn)換解析該結(jié)果,再將解析后的 結(jié)果推給流水線,以便下一個轉(zhuǎn)換進行處理。當輸入數(shù)據(jù)比較大時,該過程會以塊的方式來處理:每次將一組行發(fā)送給AS服務(wù)器來進行預(yù)測。 下圖顯示了該轉(zhuǎn)換的“挖掘模型”選項卡,在該選項卡上將連接指定到活躍的AS服務(wù)器的數(shù)據(jù)庫,還必須選擇挖掘結(jié)構(gòu)和它的模型之一。 在該轉(zhuǎn)換的“查詢”選項卡上可以輸入DMX查詢??梢允謩泳帉懖樵?,也可以單擊“生成新查詢”按鈕來啟動預(yù)測查詢生成器。預(yù)測的輸入表是流水線的輸 入,表示為@InputRowset。DMX查詢結(jié)果可以包含嵌套的結(jié)果,例如,在Select語句中使用PredictionHistogram函數(shù)。 在這種情況下,將會自動平坦化嵌套行集。 注意: 在SQL Server 2005中,SSIS數(shù)據(jù)流本身不支持嵌套行集。這一點會給數(shù)據(jù)挖掘的訓練和預(yù)測增加技術(shù)上的挑戰(zhàn),因為它可能需要嵌套的輸入,然后產(chǎn)生嵌套的輸出。為了 解決這個問題,DM查詢轉(zhuǎn)換在有嵌套行集時會自動平坦化結(jié)果。然而,對于嵌套的輸入,問題更大。當模型或者查詢需要嵌套的輸入時,推薦使用DM定型任務(wù)和 DM查詢?nèi)蝿?wù)。 5.2.3 數(shù)據(jù)流示例 下圖顯示了用于模型訓練的數(shù)據(jù)流示例。它以O(shè)LE DB數(shù)據(jù)源轉(zhuǎn)換開始,該轉(zhuǎn)換選擇FoodMart Customer表。下一個轉(zhuǎn)換是派生列轉(zhuǎn)換,該轉(zhuǎn)換創(chuàng)建了新的列Age,該列是從Birthdate列中派生的。一旦將新的列加入到流水線中,就會將數(shù) 據(jù)發(fā)送給DM定型轉(zhuǎn)換,該轉(zhuǎn)換并行地處理挖掘結(jié)構(gòu)及其相關(guān)的挖掘模型。 下圖顯示了使用DM查詢轉(zhuǎn)換的數(shù)據(jù)流。流水線以O(shè)LE DB源轉(zhuǎn)換開始,該轉(zhuǎn)換加載NewCustomer表。下一個轉(zhuǎn)換是派生列,該轉(zhuǎn)換添加從Birthdate列中派生的Age列。第三個轉(zhuǎn)換是DM查詢, 該轉(zhuǎn)換使用已訓練的決策樹模型來為每個新的客戶預(yù)測最有可能擁有的會員卡。預(yù)測的結(jié)果會發(fā)送給條件性拆分轉(zhuǎn)換,該轉(zhuǎn)換基于會員卡的類型將數(shù)據(jù)分成3個流水 線分支。左邊的分支只包含金卡會員,中間的分支只包含銀卡會員,而右邊的分支包含銅卡會員和普通會員。每個分支都會通向OLE DB目標轉(zhuǎn)換,在該轉(zhuǎn)換中分別存儲了VIP客戶、重要的客戶以及普通的客戶。 該示例也說明了數(shù)據(jù)挖掘技術(shù)可以作為高級的ETL過程來應(yīng)用。它使得數(shù)據(jù)拆分不僅可以基于已有的屬性,還可以基于預(yù)測的屬性。 5.2.4 字詞提取轉(zhuǎn)換 字詞提取轉(zhuǎn)換用于構(gòu)建特定領(lǐng)域中的關(guān)鍵術(shù)語的術(shù)語表。這通常是文本挖掘項目的第一步。在輸入流水線緩沖器中的列之一包含了某種類型(比如ntext 或者nvarchar)的文本數(shù)據(jù)。該轉(zhuǎn)換的目的是分析這一列,然后基于這一列的內(nèi)容來構(gòu)建關(guān)鍵術(shù)語的字典。轉(zhuǎn)換的輸出是一個只含一列的表。提取關(guān)鍵術(shù)語 不是想象中那么容易;存在許多復(fù)雜的技術(shù),例如,單詞詞干處理和相關(guān)的語法分析。該轉(zhuǎn)換提取名詞和名詞短語,比如data mining。 字詞提取轉(zhuǎn)換的用戶界面非常簡單。在第一個選項卡中,必須指定文本列。也可以對關(guān)鍵術(shù)語的輸出列及其相關(guān)的分數(shù)進行命名,如下圖所示。分數(shù)基于 TFIDF,TFIDF代表詞頻(Term Frequency)和倒文檔詞頻(Inverse Document Frequency)。TFIDF是統(tǒng)計學中的一種技術(shù),用于評估單詞對文檔的重要性。該重要性根據(jù)單詞在文檔中出現(xiàn)的次數(shù)而成比例地增加,但是會受單詞 在收集的所有文檔中出現(xiàn)的頻率影響而發(fā)生偏移。 5.2.5 移除數(shù)據(jù)流中的孤立點 可以應(yīng)用數(shù)據(jù)挖掘技術(shù)來移除數(shù)據(jù)流中的孤立點(outlier)。正如在第7章中所解釋的,Microsoft聚類算法提供了預(yù)測函數(shù) PredictCaseLikelihood,該函數(shù)返回某個事例適合于某個給定模型的似然估計。似然估計分數(shù)非常低的事例屬于異常??梢允褂肈M查詢轉(zhuǎn) 換來執(zhí)行針對流水線數(shù)據(jù)的預(yù)測查詢,然后基于查詢的結(jié)果來過濾異常。以下查詢基于似然估計分數(shù)來識別來自數(shù)據(jù)集的前50個孤立點。 SELECT Top 50 t.CustomerKey, PredictCaseLikelihood() From MyClusterModel 第二個選項卡(參見下圖)給出了一個選項,該選項用于指定包含的術(shù)語和不包含的術(shù)語。您可能已經(jīng)擁有必須包括的預(yù)定義的術(shù)語清單,以及不希望提取的術(shù)語清單。在這個選項卡中可以指定這兩個術(shù)語清單。 字詞提取轉(zhuǎn)換也提供用于術(shù)語的選項;例如,可以指明術(shù)語必須是單個詞或者名詞短語。對于名詞短語,也可以提及最大長度。 5.2.5 字詞查找轉(zhuǎn)換 字詞查找轉(zhuǎn)換用于(基于字典)從輸入文本列中搜索關(guān)鍵術(shù)語。字典通常通過字詞提取轉(zhuǎn)換產(chǎn)生。因為字典就是表,所以當有必要時可以編寫SQL查詢來修改清單(通過增加或者刪除術(shù)語)。 字詞查找轉(zhuǎn)換的編輯器相當簡單。第一個選項卡用于指定引用表(字典),如下圖所示。 第二個選項卡用于指定列的映射,例如,將輸入文本列映射到字典(參見下圖)。也可以直接指定一些輸入列,例如,文檔ID。 字詞查找轉(zhuǎn)換產(chǎn)生兩個新列作為輸出:字詞和詞頻。可以將該轉(zhuǎn)換的輸出認為是包含大量行的事實表(包含文檔ID、關(guān)鍵術(shù)語和相關(guān)的詞頻)。 提示: 5.2.6 文本挖掘項目示例 在我們周圍,非結(jié)構(gòu)化的數(shù)據(jù)比結(jié)構(gòu)化的數(shù)據(jù)要多得多,比如Internet,它包含數(shù)十億個非結(jié)構(gòu)化的超文本標記語言(Hypertext Markup Language,HTML)文檔。分析文本文檔變得越來越重要。兩個流行的用于文本挖掘的數(shù)據(jù)挖掘任務(wù)是分類和細分。流行的文本挖掘領(lǐng)域之一是客戶支持 領(lǐng)域。在分類的示例中,有許多來自Web和電子郵件的客戶反饋,我們希望為每個反饋指派優(yōu)先權(quán)。在細分的示例中,我們希望將相似的反饋分組到一起,然后將 它們轉(zhuǎn)發(fā)給正確的部門。 通過SQL Server 2005,可以使用SSIS和數(shù)據(jù)挖掘來實現(xiàn)文本挖掘項目。在一個典型的流中,第一步是使用字詞提取來為商業(yè)領(lǐng)域創(chuàng)建字典。第二步是使用字詞查找來從文本 列中搜索關(guān)鍵術(shù)語,從而將非結(jié)構(gòu)化的數(shù)據(jù)轉(zhuǎn)換為結(jié)構(gòu)化的輸出。第三步是應(yīng)用數(shù)據(jù)挖掘技術(shù)(例如貝葉斯、神經(jīng)網(wǎng)絡(luò)、聚類和決策樹)在字詞查找的輸出上構(gòu)建模 型。通常,字詞查找的輸出用作挖掘模型中的嵌套表。 下圖顯示了使用關(guān)聯(lián)算法的文本挖掘模型的示例。它分析了軟件開發(fā)項目的bug描述數(shù)據(jù)庫,并且確認了關(guān)鍵術(shù)語之間的關(guān)系。 6 小結(jié) 在本章中,學習了與另一個重要的SQL Server組件SQL Server集成服務(wù)(SSIS)相關(guān)的基本概念。我們介紹了控制流和數(shù)據(jù)流。還討論了一些重要的任務(wù)和轉(zhuǎn)換。SSIS是用于數(shù)據(jù)清理和轉(zhuǎn)換(該步驟對于任何數(shù)據(jù)挖掘項目來說都是很耗時的)的重要工具。 本章中間部分的內(nèi)容集中介紹了SSIS環(huán)境中特定于數(shù)據(jù)挖掘的特性。我們論述了每個與數(shù)據(jù)挖掘相關(guān)的任務(wù)和轉(zhuǎn)換。最后,我們給出了基于SQL Server 2005的兩個與文本挖掘相關(guān)的轉(zhuǎn)換和一個典型的文本挖掘項目示例。 數(shù)據(jù)挖掘和SSIS能夠從彼此中獲得好處。SSIS為數(shù)據(jù)挖掘提供數(shù)據(jù)處理的環(huán)境,而數(shù)據(jù)挖掘技術(shù)可以用作數(shù)據(jù)轉(zhuǎn)換過程的一部分。它使得SSIS更聰明,從而使得SSIS領(lǐng)先于其他經(jīng)典ETL產(chǎn)品。 到現(xiàn)在為止,您應(yīng)該清楚地理解了SSIS與數(shù)據(jù)挖掘之間的關(guān)系,以及可以在SSIS環(huán)境中完成的數(shù)據(jù)挖掘項目的類型。 |
|