使用SQL Server 2008導(dǎo)入平面文件
導(dǎo)讀:SQL Server 2008推出了一個強大的數(shù)據(jù)集成和轉(zhuǎn)換應(yīng)用程序,叫做SQL Server集成服務(wù)(SSIS)。SSIS的一個主要功能是將數(shù)據(jù)移入和移出SQL Server。外部的數(shù)據(jù)源可以以任何格式存在,另一個數(shù)據(jù)庫、Excel工作表、XML文件或一個平面文本文件,這只是僅舉幾例。數(shù)據(jù)不僅可以從數(shù)據(jù)源移到目的地,而且它還可以在它移動時被操縱和改變。這些改變可能是簡單的轉(zhuǎn)換,比如小數(shù)四舍五入或?qū)⒚Q的一個字母大寫,也可能是極其復(fù)雜的數(shù)據(jù)轉(zhuǎn)換。雖然SSIS可以做的任務(wù)列表幾乎是沒有結(jié)尾的,但是本篇文章將關(guān)注于導(dǎo)入一個文本文件到一個標準的SQL Server數(shù)據(jù)庫表中去。
BIDS
SQL Server集成服務(wù)應(yīng)用程序是在BIDS(商業(yè)智能開發(fā)套件)中創(chuàng)建的。BIDS是一個Visual Studio工具,包含在SQL Server內(nèi)。除了創(chuàng)建SSIS包,BIDS還可以用來為SQL Server報表服務(wù)和分析服務(wù)創(chuàng)建應(yīng)用程序。就像SQL Server管理套件是SQL的“瑞士軍刀”一樣,BIDS是一個用于創(chuàng)建導(dǎo)入、導(dǎo)出和數(shù)據(jù)操縱程序的全能開發(fā)工具。
建立
在第一個練習(xí)中,我們將導(dǎo)入一個包含聯(lián)系名稱的文本文件到SQL Server中去。沒有循環(huán)或編程,只是一個簡單的文件導(dǎo)入示例。我創(chuàng)建了一個包含五個聯(lián)系人的文本文件,它們由豎線隔開,如下所示。
Gustavo |Achong |1970 Napa Ct. |London
Catherine|Abel |9833 Mt. Dias Blv.|London
Kim|Abercrombie |7484 Roundtree Drive|London
Humberto|Acevedo|9539 Glenside Dr|London
Pilar|Ackerman |1226 Shoe St. |Oxford
每一行包括一個First Name、 Last Name、Address和City。豎線(|)分隔數(shù)據(jù)的每一列。SQL Server沒有要求必須是豎線。任何分隔符都可以使用,包括普通格式的Tab、空格和逗號。我復(fù)制了上面的聯(lián)系人到記事本中并將它們保存在我的C:\驅(qū)動盤上。在SQL Server中,我使用下面的TSQL創(chuàng)建了一個數(shù)據(jù)庫叫做“Test”和一個Contacts表:
CREATE TABLE [dbo].[Contacts](
[FirstName] [varchar](50) NULL,
[LastName] [varchar](50) NULL,
[Address] [varchar](50) NULL,
[City] [varchar](50) NULL,
[State] [varchar](50) NULL,
[Zip] [varchar](50) NULL
) ON [PRIMARY]
這個新的Contacts表包括叫做“State”和“Zip”的字段,它們不出現(xiàn)在我們的文本文件中。SSIS在我們的導(dǎo)入過程中將忽略這些字段。
BIDS
要開始這個例子,通過選擇Start->All Programs->Microsoft SQL Server 2008,然后是Microsoft SQL Server Business Intelligence Development Studio(BIDS)從而在Windows中打開BIDS。一個空的BIDS 界面將打開。從頂部的菜單中選擇File->New Project。在New Project對話框中,選擇Business Intelligence Project->Integration Service Project,然后指定一個項目名稱和目錄。這個位置不需要和我們將要導(dǎo)入的文本文件位置一樣。
圖1
點擊OK將彈出一個空白的設(shè)計器。注意,設(shè)計器頂部有四個標簽頁:Control Flow、Data Flow、Event Handlers和Package Explorer。在SSIS中創(chuàng)建的程序叫做包,而Package Explorer是用來導(dǎo)航它們的。在本文中我們將關(guān)注的標簽頁是Control和Data Flow標簽頁。“Control”項是一個對象容器,它使我們的程序具有結(jié)構(gòu)、功能或約束。Data Flow項移動和/或轉(zhuǎn)換數(shù)據(jù)值。我認為對于這兩個標簽頁,我們是以相同的方式來分隔GUI代碼和業(yè)務(wù)邏輯的。Control定義是“什么”( FTP Task、Import Task、Send Mail Task),而Data Flow指定誰以及怎么做。
#p#
從Control Flow Items 的菜單里,拖拉一個“Data Flow Task”對象到設(shè)計器上。Data Flow Task將數(shù)據(jù)從數(shù)據(jù)源移動到另一個。我右鍵單擊了這個任務(wù)并重新命名它為dftContacts,如下所示。
圖2
雙擊這個任務(wù),進入到它的Data Flow屬性中。在這個數(shù)據(jù)流中,我們將定義我們的文本文件源和SQL Server目標表以及哪些數(shù)據(jù)字段要移到哪里。
從左邊的Data Flow Services菜單中,拖拉一個“Flat File Source”對象到Data Flow界面上。雙擊它來打開它的屬性。點擊New按鈕來創(chuàng)建到這個文本文件的一個新連接。在Flat File Connection Manager編輯器中,我命名它為“TextFileContacts”,然后瀏覽到硬盤上這個文件的位置。
圖3
雙擊Columns菜單項,然后指定一個|(豎線)作為字段分隔符。點擊刷新按鈕將顯示這個文本文件的五條數(shù)據(jù)記錄。
圖4
點擊OK返回到Flat File Source Editor。接下來,我們將給這些字段一個頭名稱。盡管這不是所要求的,但是它使得這個包更加易讀。點擊左邊菜單中的“Columns”。在Output字段中,將名稱從Column 0、1、 2、3改為FirstName、 LastName、Address和City,如下所示,然后點擊OK。
圖5
#p#
我們的平面文件導(dǎo)入對象現(xiàn)在完成了。接下來,我們將指定我們的目標SQL Server表。從左邊的菜單中,在工具箱的Data Flow Destination區(qū)域中,拖拉一個“SQL Server Destination”到Data Flow工作區(qū)域上。接下來,點擊Flat File Source并從它拖拉綠色箭頭到新的SQL Server Destination。
圖6
這指定了這個數(shù)據(jù)將從Flat File流向SQL Server目標。注意目標圖標中的紅色X。這意味著這個對象沒有被配置。雙擊SQL Server Destination對象來打開它的屬性。點擊Connection Manager上的New,然后點擊Configure OLE DB Connection Manager上的New。接下來,指定你的SQL Server名稱,驗證方法和目標表的名稱。點擊“Test Connection”按鈕來確認連接是有效的。點擊OK然后再點擊OK返回到SQL Design Editor。接下來,從“Use a table or view”下拉列表中選擇新創(chuàng)建的Contacts表。因為我們在SQL Server表中具有的字段比Flat File源中的多,所以點擊左邊菜單中的“Mappings”來核實字段將正確地流出。源和目標應(yīng)該和SQL Server表匹配,State 和Zip字段被忽略,因為在平面文件源中沒有任何用于它們的導(dǎo)入數(shù)據(jù),如下所示。點擊OK。
圖7
這個包現(xiàn)在完成了。點擊頂部菜單中的保存圖標。要運行這個包,點擊頂部菜單中的綠色三角形。這個包將以調(diào)試模式執(zhí)行。當每個對象成功完成后,它將變成綠色。平面文件中的數(shù)據(jù)記錄轉(zhuǎn)移到了SQL server中。
總結(jié)
SQL Server 集成服務(wù)(SSIS)是一個全能的導(dǎo)入、導(dǎo)出、轉(zhuǎn)換管理器。只要進行少量的練習(xí),就可以很容易地使用BIDS的圖形化界面來創(chuàng)建復(fù)雜的工作。上文中也給出了詳細的分析,希望能夠?qū)Υ蠹覍W(xué)習(xí)SQL Server數(shù)據(jù)庫有所幫助。
【編輯推薦】