程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> Integration Services:數據流任務(上)

Integration Services:數據流任務(上)

編輯:關於.NET

數據流任務是SSIS中的一個核心任務,估計大多數ETL包中,都離不開數據流任務。所以我們也從數據流任務學起。

數據流任務包括三種不同類型的數據流組件:源、轉換、目標。其中:

源:它是指一組數據存儲體,包括關系數據庫的表、視圖;文件(平面文件、Excel 文件、Xml 文件等);系統內存中的數據集等。

轉換:這是數據流任務的核心組件,如果說數據流任務是ETL的核心,那麼數據流任務中的轉換,則是ETL核心中的核心了。它包含非常豐富的數據轉換組件,比如數據更新、聚合、合並、分發、排序、查找等。可以說SQL語句中有的功能,它都基本上運用起來了。

目標:與“源”相對應,也是一組數據存儲體。包含表、視圖;文件;多維數據集、內存記錄集等。

除以上三類組件外,還有一種組件,那就是”流(Flow)“,它形象地顯示了數據從”源“,經過”轉換“,最後到達”目的“地的一組路徑。我們可以利用”流“,來查看數據,添加備注說明等。

下面一幅圖,就充分展示了源、轉換、目的、流的關系。

 

下面我們以將IIS Log 導入數據庫為例,來介紹如何進行數據流任務開發。

在開發之前,我們先來看看IISlog 的結構,如圖:

它基本上記錄了網頁浏覽的所有信息,如日期、時間、客戶IP、服務器IP、頁面地址、頁面參數等很多信息,我們再根據這些信息,在關系型數據庫中,建立一張對應表,來記錄這些信息。

代碼

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]

萬事俱備,下面我們就可以開始ETL的開發之旅了,打開Visual Studio 2008 工具,[文件]-->[新建]-->[項目],選擇“Integration Services 項目”,ETL 的開發界面就躍入眼簾,這是從事.Net 開發的朋友們非常熟悉的界面。打開左邊“工具箱”,將“數據流任務”拖到主窗口“控制流面板”,如圖所示:

然後雙擊“控制流”面板上的“數據流任務”,進入“數據流”面板,這兩部分UI沒有什麼差異,只是所實現的功能不同罷了。真正的數據流任務開發,從現在才算開始。

打開左邊“工具箱”,可以看到有三大部分:數據流源、數據流轉換、數據流目標。我們從“數據流源”中,將“平面文件源”拖到主窗口下,雙擊打開“平面文件源”編輯器,點擊“新建”,打開平面文件連接管理編輯器,如圖:

輸入連接名稱,選擇IisLog 文件,選擇行分隔符、列分隔符,就可以從預覽窗口看到數據的真面目了。

這裡有一點要注意,不同的平面文件,其行分隔符、列分隔符都是不一樣的,如果選不正確,將達不到你想要的效果,所有的數據都可能擠到一列中去了。一般行分隔比較簡單,基本上都是以回車換行({CR}{LF})來分隔;列分隔符卻不一樣了,它既可以以任意文本字符來分隔,比如逗號(,)、分號(;)、冒號(:)tab符、豎線(|),以及常用的文字字符、數字字符,也可以定義每一列的固定寬度來分隔。這就需要視文件源不一樣,分別對待了。

在平面文件連接管理器中,選擇“高級”,還可以定義每一列的列名、數據類型、字符長度等信息。等一切定義完成,點擊確定,返回到平面文件編輯器界面,前面建立的連接將自動返回到“平面文件連接管理器”的下拉列表框中,下面就要以選擇需要輸出的列了,如圖:

然後再選擇“錯誤輸出”,缺省選項如下圖所示:

這一選項非常重要,是要求我們配置當源數據發生錯誤的時候該如何處理,一般源數據發生錯誤有兩種情況:一是數據類型錯誤,比如日期格式錯誤、數字變字符了等;另一情況就是字符太長,超出列寬了。根據不同的情況,其處理方式也不一樣,系統提供了三種解決辦法:

忽略失敗:是指如果某一行數據錯誤,忽略此行,不影響程序執行,繼續導入其它數據。

重定向行:將錯誤的數據行,導入到另外一個數據流目標,供以後人工檢查後,再重新處理。

組件失敗:這是最嚴格的,只要遇到數據錯誤,組件立即失敗,停止運行。

就IISLOg 這樣的數據源文件來說,有錯誤數據行,那是是經常發生,但是這些少量數據錯誤,也不會影響最終的結果,我們就要以考慮容錯性為主了,放寬對數據質量的要求,一般選擇“忽略錯誤”,以方便程序繼續運行。

一切都定義完後,我們看到“平面文件源”控件上,還有一個紅色的叉(X),那是指沒有為此數據源定義目標,那就是下一步要定義的。另外下面還有兩個長線箭頭,一個綠色,一外紅色,其中綠色:表示正確數據流通路,紅色表示錯誤數據流通路,如果前面定義錯誤“ 重定向行”,那麼錯誤數據將沿著紅色路徑,流向錯誤數據存放地。

定義數據源目標,這可能要簡單一些了,同理從左邊"工具箱"中,看到有很多種類型的數據源目標,我們選擇“OLE DB 目標”,將“平面文件源”控件下的綠色箭頭連接到“OLE DB 目標”,然後雙擊,打開“OLE DB 目標編輯器”窗口,“新建”數據庫連接,如圖:

返回到“OLE DB 目標編輯器”窗口,在數據訪問模式下,選擇“表或者視圖--快速加載”一項,然後再選擇對應的表,如圖:

下面配置列映射,如圖:

如果沒有的列,直接忽略即可(前提是表中該列允許為空),後面仍然是配置錯誤處理方式,參照平面文件源錯誤處理方式即可。

到此為止,一個簡單的數據流任務就基本上完成了,點擊運行,我們期待已久的結果出現了。

當然,在實際開發過程中,可能並沒有這麼順利,會遇到很多各種各樣的問題,在這篇文章中我們很少提及,主要是因為這僅是個開始,沒有涉及到這麼深入,在以後的專題中,會逐漸講解。

一個簡單的數據源任務就算完成了,其實這只是一個Demo ,讓大家了解了一個概況,可以說萬裡長城只是走出了第一步,真正的ETL不會這麼簡單。下後面我們將介紹ETL最精彩的部分“數據流轉換”,敬請期待。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved