SSIS 学习(2):数据流任务(上)
?? ? 數(shù)據(jù)流任務(wù)是SSIS中的一個(gè)核心任務(wù),估計(jì)大多數(shù)ETL包中,都離不開(kāi)數(shù)據(jù)流任務(wù)。所以我們也從數(shù)據(jù)流任務(wù)學(xué)起。
數(shù)據(jù)流任務(wù)包括三種不同類(lèi)型的數(shù)據(jù)流組件:源、轉(zhuǎn)換、目標(biāo)。其中:
源:它是指一組數(shù)據(jù)存儲(chǔ)體,包括關(guān)系數(shù)據(jù)庫(kù)的表、視圖;文件(平面文件、Excel 文件、Xml 文件等);系統(tǒng)內(nèi)存中的數(shù)據(jù)集等。
轉(zhuǎn)換:這是數(shù)據(jù)流任務(wù)的核心組件,如果說(shuō)數(shù)據(jù)流任務(wù)是ETL的核心,那么數(shù)據(jù)流任務(wù)中的轉(zhuǎn)換,則是ETL核心中的核心了。它包含非常豐富的數(shù)據(jù)轉(zhuǎn)換組件,比如數(shù)據(jù)更新、聚合、合并、分發(fā)、排序、查找等。可以說(shuō)SQL語(yǔ)句中有的功能,它都基本上運(yùn)用起來(lái)了。
目標(biāo):與“源”相對(duì)應(yīng),也是一組數(shù)據(jù)存儲(chǔ)體。包含表、視圖;文件;多維數(shù)據(jù)集、內(nèi)存記錄集等。
? 除以上三類(lèi)組件外,還有一種組件,那就是”流(Flow)“,它形象地顯示了數(shù)據(jù)從”源“,經(jīng)過(guò)”轉(zhuǎn)換“,最后到達(dá)”目的“地的一組路徑。我們可以利用”流“,來(lái)查看數(shù)據(jù),添加備注說(shuō)明等。
下面一幅圖,就充分展示了源、轉(zhuǎn)換、目的、流的關(guān)系。
?
下面我們以將IIS Log 導(dǎo)入數(shù)據(jù)庫(kù)為例,來(lái)介紹如何進(jìn)行數(shù)據(jù)流任務(wù)開(kāi)發(fā)。
在開(kāi)發(fā)之前,我們先來(lái)看看IISlog 的結(jié)構(gòu),如圖:
它基本上記錄了網(wǎng)頁(yè)瀏覽的所有信息,如日期、時(shí)間、客戶(hù)IP、服務(wù)器IP、頁(yè)面地址、頁(yè)面參數(shù)等很多信息,我們?cè)俑鶕?jù)這些信息,在關(guān)系型數(shù)據(jù)庫(kù)中,建立一張對(duì)應(yīng)表,來(lái)記錄這些信息。?
代碼 CREATE?TABLE?[dbo].[IisLog](????[c_Date]?[datetime]?NULL,
????[c_Time]?[varchar](10)?NULL,
????[c_Ip]?[varchar](20)?NULL,
????[cs_Username]?[varchar](20)?NULL,
????[s_Ip]?[varchar](20)?NULL,
????s_ComputerName?varchar(30)?null,
????[s_Port]?[varchar](10)?NULL,
????[cs_Method]?[varchar](10)?NULL,
????[cs_Uri_Stem]?[varchar](500)?NULL,
????[cs_Uri_Query]?[varchar](500)?NULL,
????[sc_Status]?[varchar](20)?NULL,
????sc_SubStatus?varchar(20)?null,
????sc_Win32_Status?varchar(20)?null,
????sc_Bytes?int?null,
????cs_Bytes?int?null,
????time_Taken?varchar(10)?null,
????cs_Version?varchar(20)?null,
????cs_Host?varchar(20)?null,
????[cs_User_Agent]?[varchar](500)?NULL,
????[cs_Refere]?[varchar](500)?NULL
)?ON?[PRIMARY]
?
萬(wàn)事俱備,下面我們就可以開(kāi)始ETL的開(kāi)發(fā)之旅了,打開(kāi)Visual Studio 2008 工具,[文件]-->[新建]-->[項(xiàng)目],選擇“Integration Services 項(xiàng)目”,ETL 的開(kāi)發(fā)界面就躍入眼簾,這是從事.Net 開(kāi)發(fā)的朋友們非常熟悉的界面。打開(kāi)左邊“工具箱”,將“數(shù)據(jù)流任務(wù)”拖到主窗口“控制流面板”,如圖所示:
然后雙擊“控制流”面板上的“數(shù)據(jù)流任務(wù)”,進(jìn)入“數(shù)據(jù)流”面板,這兩部分UI沒(méi)有什么差異,只是所實(shí)現(xiàn)的功能不同罷了。真正的數(shù)據(jù)流任務(wù)開(kāi)發(fā),從現(xiàn)在才算開(kāi)始。
打開(kāi)左邊“工具箱”,可以看到有三大部分:數(shù)據(jù)流源、數(shù)據(jù)流轉(zhuǎn)換、數(shù)據(jù)流目標(biāo)。我們從“數(shù)據(jù)流源”中,將“平面文件源”拖到主窗口下,雙擊打開(kāi)“平面文件源”編輯器,點(diǎn)擊“新建”,打開(kāi)平面文件連接管理編輯器,如圖: ??
輸入連接名稱(chēng),選擇IisLog 文件,選擇行分隔符、列分隔符,就可以從預(yù)覽窗口看到數(shù)據(jù)的真面目了。
這里有一點(diǎn)要注意,不同的平面文件,其行分隔符、列分隔符都是不一樣的,如果選不正確,將達(dá)不到你想要的效果,所有的數(shù)據(jù)都可能擠到一列中去了。一般行分隔比較簡(jiǎn)單,基本上都是以回車(chē)換行({CR}{LF})來(lái)分隔;列分隔符卻不一樣了,它既可以以任意文本字符來(lái)分隔,比如逗號(hào)(,)、分號(hào)(;)、冒號(hào)(:)tab符、豎線(xiàn)(|),以及常用的文字字符、數(shù)字字符,也可以定義每一列的固定寬度來(lái)分隔。這就需要視文件源不一樣,分別對(duì)待了。
在平面文件連接管理器中,選擇“高級(jí)”,還可以定義每一列的列名、數(shù)據(jù)類(lèi)型、字符長(zhǎng)度等信息。 等一切定義完成,點(diǎn)擊確定,返回到平面文件編輯器界面,前面建立的連接將自動(dòng)返回到“平面文件連接管理器”的下拉列表框中,下面就要以選擇需要輸出的列了,如圖:
?
??? 然后再選擇“錯(cuò)誤輸出”,缺省選項(xiàng)如下圖所示:
?? ? ?這一選項(xiàng)非常重要,是要求我們配置當(dāng)源數(shù)據(jù)發(fā)生錯(cuò)誤的時(shí)候該如何處理,一般源數(shù)據(jù)發(fā)生錯(cuò)誤有兩種情況:一是數(shù)據(jù)類(lèi)型錯(cuò)誤,比如日期格式錯(cuò)誤、數(shù)字變字符了等;另一情況就是字符太長(zhǎng),超出列寬了。根據(jù)不同的情況,其處理方式也不一樣,系統(tǒng)提供了三種解決辦法:
忽略失敗:是指如果某一行數(shù)據(jù)錯(cuò)誤,忽略此行,不影響程序執(zhí)行,繼續(xù)導(dǎo)入其它數(shù)據(jù)。
重定向行:將錯(cuò)誤的數(shù)據(jù)行,導(dǎo)入到另外一個(gè)數(shù)據(jù)流目標(biāo),供以后人工檢查后,再重新處理。
組件失敗:這是最嚴(yán)格的,只要遇到數(shù)據(jù)錯(cuò)誤,組件立即失敗,停止運(yùn)行。
就IISLOg 這樣的數(shù)據(jù)源文件來(lái)說(shuō),有錯(cuò)誤數(shù)據(jù)行,那是是經(jīng)常發(fā)生,但是這些少量數(shù)據(jù)錯(cuò)誤,也不會(huì)影響最終的結(jié)果,我們就要以考慮容錯(cuò)性為主了,放寬對(duì)數(shù)據(jù)質(zhì)量的要求,一般選擇“忽略錯(cuò)誤”,以方便程序繼續(xù)運(yùn)行。
???? 一切都定義完后,我們看到“平面文件源”控件上,還有一個(gè)紅色的叉(X),那是指沒(méi)有為此數(shù)據(jù)源定義目標(biāo),那就是下一步要定義的。另外下面還有兩個(gè)長(zhǎng)線(xiàn)箭頭,一個(gè)綠色,一外紅色,其中綠色:表示正確數(shù)據(jù)流通路,紅色表示錯(cuò)誤數(shù)據(jù)流通路,如果前面定義錯(cuò)誤“重定向行”,那么錯(cuò)誤數(shù)據(jù)將沿著紅色路徑,流向錯(cuò)誤數(shù)據(jù)存放地。
定義數(shù)據(jù)源目標(biāo),這可能要簡(jiǎn)單一些了,同理從左邊"工具箱"中,看到有很多種類(lèi)型的數(shù)據(jù)源目標(biāo),我們選擇“OLE DB 目標(biāo)”,將“平面文件源”控件下的綠色箭頭連接到“OLE DB 目標(biāo)”,然后雙擊,打開(kāi)“OLE DB 目標(biāo)編輯器”窗口,“新建”數(shù)據(jù)庫(kù)連接,如圖:
?
返回到“OLE DB 目標(biāo)編輯器”窗口,在數(shù)據(jù)訪(fǎng)問(wèn)模式下,選擇“表或者視圖--快速加載”一項(xiàng),然后再選擇對(duì)應(yīng)的表,如圖:
下面配置列映射,如圖:
如果沒(méi)有的列,直接忽略即可(前提是表中該列允許為空),后面仍然是配置錯(cuò)誤處理方式,參照平面文件源錯(cuò)誤處理方式即可。
到此為止,一個(gè)簡(jiǎn)單的數(shù)據(jù)流任務(wù)就基本上完成了,點(diǎn)擊運(yùn)行,我們期待已久的結(jié)果出現(xiàn)了。
?
?當(dāng)然,在實(shí)際開(kāi)發(fā)過(guò)程中,可能并沒(méi)有這么順利,會(huì)遇到很多各種各樣的問(wèn)題,在這篇文章中我們很少提及,主要是因?yàn)檫@僅是個(gè)開(kāi)始,沒(méi)有涉及到這么深入,在以后的專(zhuān)題中,會(huì)逐漸講解。
一個(gè)簡(jiǎn)單的數(shù)據(jù)源任務(wù)就算完成了,其實(shí)這只是一個(gè)Demo ,讓大家了解了一個(gè)概況,可以說(shuō)萬(wàn)里長(zhǎng)城只是走出了第一步,真正的ETL不會(huì)這么簡(jiǎn)單。下后面我們將介紹ETL最精彩的部分“數(shù)據(jù)流轉(zhuǎn)換”,敬請(qǐng)期待。
轉(zhuǎn)載于:https://www.cnblogs.com/invinboy/archive/2009/12/16/1619809.html
總結(jié)
以上是生活随笔為你收集整理的SSIS 学习(2):数据流任务(上)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 工程师必备APP抓包技能
- 下一篇: 广电宽带业务发展的四种策略