在上一個(gè)隨筆中我們處理了一個(gè)010305c.dat文件,如果在一個(gè)文件夾中有多個(gè)dat文件應(yīng)該怎么辦呢? 這里就需要使用Foreach Loop container任務(wù)來(lái)循環(huán)處理文件,這個(gè)需要使用多個(gè)dat文件。
循環(huán)
首選對(duì)路徑C:\SSISDemos下的所有.DAT文件進(jìn)行循環(huán)操作并下載到數(shù)據(jù)庫(kù)中。使用Foreach Loop循環(huán)執(zhí)行操作。這里還在上隨筆的Package里拖放一個(gè)Foreach Loop Container,重命名為L(zhǎng)oop Through Files。
雙擊打開(kāi)邊界界面,點(diǎn)擊打開(kāi)Collection標(biāo)簽界面,可以看到Enumerator欄內(nèi)默認(rèn)選擇Foreach File Enumerator,但是需要點(diǎn)擊打開(kāi)下拉列表框重新選擇Foreach File Enumerator,然后在Folder欄傍邊點(diǎn)擊Browser選擇目錄C:\SSISDemos,F(xiàn)iles欄內(nèi)輸入如圖5-15
圖5-15
現(xiàn)在需要設(shè)置Foreach File Eumeration中的變量。點(diǎn)擊Variable Mappings標(biāo)簽界面在Variable下拉列表框中選擇<New Variable…>,打開(kāi)Add Variable對(duì)話框。為這個(gè)任務(wù)指定變量使用范圍。為變量命名為ExtractFileName,其他設(shè)置保持默認(rèn),點(diǎn)擊OK退出編輯界面。
設(shè)置動(dòng)態(tài)package
循環(huán)操作創(chuàng)建之后,需要在ConnectionManager中設(shè)置文件名和循環(huán)操作中產(chǎn)生的文件名一致。右擊我們先前創(chuàng)建的Corporation Extract選擇屬性,在屬性面板中點(diǎn)擊Expressions對(duì)應(yīng)的按鈕。
打開(kāi)Expressions Editor在Property下拉列表框中選擇ConnectionString,如圖5-16,可以直接在Expression中輸入@[User::ExtractFileName]或者點(diǎn)擊Expression欄中的按鈕將這個(gè)變量拖放到表格中。如果輸入變量要保證和Foreach Loop中設(shè)置的變量一致。
圖5-16
設(shè)置完成之后屬性如圖5-17
圖5-17
這樣每次在C:\SSISDemos路徑下查找到一個(gè).DAT文件,ExtractFileName變量將被設(shè)置為帶路徑的文件名,這樣這個(gè)Package會(huì)對(duì)每個(gè).DAT文件進(jìn)行處理。
現(xiàn)在我們遺漏的一個(gè)地方是將文件數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫(kù)之后還沒(méi)有把文件歸檔,首先在C:\SSISDemos目錄下新建一個(gè)子文件夾C:\SSISDemos\Archive。在Connection Manager下右擊新建一個(gè)文件鏈接,Usage Type選擇Existing Folder,然后點(diǎn)擊下方Browser指向C:\SSISDemos\Archive,點(diǎn)擊OK并重命名為Archive File。
然后再Loop Through Files內(nèi)拖放一個(gè)File System任務(wù)并重命名為Archive File,使用綠色箭頭把它和Loop Corporate Data連接起來(lái),重命名為Archive File。
雙擊Archive File打開(kāi)編輯界面如圖5-17,設(shè)置Operation選項(xiàng)為Move File,很明顯這個(gè)意思就是將文件復(fù)制到目的文件夾內(nèi),這個(gè)屬性還有很多的選擇項(xiàng),可以根據(jù)意思揣度出來(lái)是要進(jìn)行什么操作。Destination設(shè)置為新建的Archive File連接,SourceConnection設(shè)置為Corporation Extract連接。最后整個(gè)Package首先抽取文件中的數(shù)據(jù)然后將文件轉(zhuǎn)移到指定的路徑內(nèi)。
圖5-17
現(xiàn)在可以運(yùn)行整個(gè)Package,點(diǎn)擊保存,運(yùn)行,最后運(yùn)行成功之后的Package如圖5-18。
圖5-18
【創(chuàng)建SSIS包】總結(jié)
這一節(jié)主要了解基本的SSIS轉(zhuǎn)換,任務(wù),容器。我們建立了一個(gè)完整的Package并將錯(cuò)誤信息記錄下來(lái),然后把它放在一個(gè)循環(huán)中,找到每一個(gè).DAT文件,將文件中的數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫(kù)中,最后將文件放到另外一個(gè)目錄中。下面的文章中將介紹更加復(fù)雜的ETL任務(wù)。