數(shù)據(jù)整合的核心內(nèi)容是從數(shù)據(jù)源中抽取數(shù)據(jù),然后對(duì)這些數(shù)據(jù)進(jìn)行轉(zhuǎn)化,最終加載的目標(biāo)數(shù)據(jù)庫(kù)或者數(shù)據(jù)倉(cāng)庫(kù)中去,這也就是我們通常所說(shuō)的 ETL 過(guò)程。IBM WebSphere DataStage 為整個(gè) ETL 過(guò)程提供了一個(gè)圖形化的開發(fā)環(huán)境。 傳統(tǒng)的數(shù)據(jù)整合方式需要大量的手工編碼,而采用 IBM WebSphere DataStage 進(jìn)行數(shù)據(jù)整合可以大大的減少手工編碼的數(shù)量,而且更加容易維護(hù)。數(shù)據(jù)整合的核心內(nèi)容是從數(shù)據(jù)源中抽取數(shù)據(jù),然后對(duì)這些數(shù)據(jù)進(jìn)行轉(zhuǎn)化,最終加載的目標(biāo)數(shù)據(jù)庫(kù)或者數(shù)據(jù)倉(cāng)庫(kù)中去,這也就是我們通常所說(shuō)的ETL過(guò)程。IBM WebSphere DataStage 為整個(gè) ETL 過(guò)程提供了一個(gè)圖形化的開發(fā)環(huán)境。本文將從以下幾個(gè)方面來(lái)介紹 IBM WebSphere DataStage: 1. 數(shù)據(jù)源連接能力 2. 完備的開發(fā)環(huán)境 3. ETL Job 的并行執(zhí)行能力 4. 開發(fā)一個(gè)簡(jiǎn)單的 ETL Job
數(shù)據(jù)整合工具的數(shù)據(jù)源連接能力是非常重要的,這將直接決定它能夠應(yīng)用的范圍。IBM WebSphere DataStage 能夠直接連接非常多的數(shù)據(jù)源,包括: 1、 文本文件 2、 XML 文件 3、 企業(yè)應(yīng)用程序,比如 SAP、Siebel、Oracle 以及PeopleSoft 4、 幾乎所有的數(shù)據(jù)庫(kù)系統(tǒng),比如 DB2、Oracle、SQL Server、Informix等 5、 Web services 6、 WebSphere MQ 正是因?yàn)檫@么好的連接能力,IBM WebSphere DataStage 使用戶能夠?qū)W⒂跀?shù)據(jù)轉(zhuǎn)換的邏輯而不用太擔(dān)心數(shù)據(jù)的抽取和加載。
IBM WebSphere DataStage 的開發(fā)環(huán)境是基于 C/S 模式的,通過(guò) DataStage Client 連接到DataStage Server 上進(jìn)行開發(fā)。這里有一點(diǎn)需要注意,DataStage Client 只能安裝在 Windows 平臺(tái)上面。而 DataStage Server 則支持多種平臺(tái),比如 Windows、Redhat Linux、AIX、HP-UNIX。 DataStage Client 有四種客戶端工具。分別是 DataStage Administrator、DataStage Designer、DataStage Manager、DataStage Director。接下來(lái)首先介紹這幾種客戶端工具在 DataStage 架構(gòu)中所處的位置以及它們?nèi)绾螀f(xié)同工作來(lái)開發(fā) ETL Job 的,接著再分別詳細(xì)介紹每個(gè)工具的功能。 圖 1 描述了 IBM WebSphere DataStage 的整個(gè)系統(tǒng)架構(gòu)。DataStage 的客戶端工具連接到DataStage Server 上進(jìn)行 ETL Job 的開發(fā),DataStage Server 再與后臺(tái)的數(shù)據(jù)庫(kù)連接起來(lái)進(jìn)行數(shù)據(jù)處理。DataStage 的客戶端工具之間的是一個(gè)相互合作的關(guān)系。下面通過(guò)介紹 ETL Job的開發(fā)過(guò)程來(lái)介紹他們之間的這種關(guān)系。 1. 用 DataStage Administrator 新建一個(gè)項(xiàng)目; 2. 用 DataStage Designer 連接到這個(gè)新建的項(xiàng)目上進(jìn)行ETL Job的設(shè)計(jì); 3. 用 DataStage Director 對(duì)設(shè)計(jì)好的ETL Job設(shè)置運(yùn)行的模式,比如多長(zhǎng)時(shí)間運(yùn)行一次ETL Job; 4.用 DataStage Manager 進(jìn)行ETL Job的備份等。 圖 1:IBM WebSphere DataStage 架構(gòu)圖 ![]() DataStage Administrator 的主要功能有以下幾個(gè): 1. 設(shè)置客戶端和服務(wù)器連接的最大時(shí)間。 以管理員的身份登陸 DataStage Administrator。你就會(huì)看到如下圖所示的畫面。在這里你可以設(shè)置客戶端和服務(wù)器的最大連接時(shí)間,默認(rèn)的最大連接時(shí)間是永不過(guò)期。最大連接時(shí)間的意思就是如果客戶端和服務(wù)器的連接時(shí)間超過(guò)了最大連接時(shí)間,那么客戶端和服務(wù)器之間的連接將被強(qiáng)行斷開。 ![]() 2. 添加和刪除項(xiàng)目 在 Projects 這個(gè)標(biāo)簽中,可以新建或者刪除項(xiàng)目,以及設(shè)置已有項(xiàng)目的屬性。這里有必要介紹一下項(xiàng)目的概念,要用 DataStage 進(jìn)行 ETL 的開發(fā),首先就要用 DataStage Administrator 新建一個(gè)項(xiàng)目,然后在這個(gè)項(xiàng)目里面進(jìn)行 ETL Job 的開發(fā)。 ![]() 3. License的管理 可以在Licensing標(biāo)簽中更新License。 ![]() DataStage Designer是ETL Job開發(fā)的核心環(huán)境。值得注意的是,登陸DataStage Designer 的時(shí)候,不僅要指定DataStage Server 的IP,而且要指定連接到這個(gè)DataStage Server上的哪個(gè)項(xiàng)目上面,上面已經(jīng)提到DataStage的項(xiàng)目是由DataStage Administrator 來(lái)創(chuàng)建的。DataStage Designer的主要功能可以概括為以下三個(gè)方面: 1. ETL Job的開發(fā) DataStage Designer里面包含了DataStage為ETL開發(fā)已經(jīng)構(gòu)建好的組件, 主要分為兩種,一種是用來(lái)連接數(shù)據(jù)源的組件,另一種是用來(lái)做數(shù)據(jù)轉(zhuǎn)換的組件。利用這些組件,開發(fā)人員可以通過(guò)圖形化的方式進(jìn)行ETL Job的開發(fā)。 2. ETL Job的編譯 開發(fā)好ETL Job后,可以直接在DataStage Designer里面進(jìn)行編譯。如果編譯不通過(guò),編譯器會(huì)幫助開發(fā)人員定位到出錯(cuò)的地方。 3. ETL Job的執(zhí)行 編譯成功后,ETL Job就可以執(zhí)行了,在DataStage Designer里面可以運(yùn)行ETL Job。ETL Job的運(yùn)行情況可以在DataStage Director中看到,這方面的內(nèi)容將在介紹DataStage Director的時(shí)候提到。 DataStage Manager主要用來(lái)管理項(xiàng)目資源。一個(gè)項(xiàng)目可能包含多個(gè)ETL Job,可以用DataStage Manager把一個(gè)項(xiàng)目里面的ETL Job導(dǎo)出來(lái)。然后再用DataStage Manager導(dǎo)入到另外一個(gè)項(xiàng)目中去,利用這個(gè)功能一方面可以實(shí)現(xiàn)ETL Job的備份,另一方面就是可以在多個(gè)項(xiàng)目之間來(lái)重復(fù)使用開發(fā)好的ETL Job。在DataStage Manager里面可以把數(shù)據(jù)庫(kù)中的表結(jié)構(gòu)直接導(dǎo)入到項(xiàng)目中來(lái),供這個(gè)項(xiàng)目中的所有ETL Job使用。DataStage Designer也提供了從數(shù)據(jù)庫(kù)中直接導(dǎo)入表結(jié)構(gòu)的功能。 DataStage Director 主要有以下兩個(gè)功能: 1. 監(jiān)測(cè)ETL Job的運(yùn)行狀態(tài) ETL Job在DataStage Designer中編譯好后,可以通過(guò)DataStage Director來(lái)運(yùn)行它。前面在介紹DataStage Designer的時(shí)候提到在DataStage Designer中也可以運(yùn)行ETL Job,但是如果要監(jiān)測(cè)ETL Job的運(yùn)行情況還是要登陸到DataStage Director中。在這里,你可以看到ETL Job運(yùn)行的詳細(xì)的日志文件,還可以查看一些統(tǒng)計(jì)數(shù)據(jù),比如ETL Job每秒所處理的數(shù)據(jù)量。 2. 設(shè)置何時(shí)運(yùn)行ETL Job ETL Job開發(fā)完成后,我們可能希望ETL Job在每天的某個(gè)時(shí)間都運(yùn)行一次。DataStage Director為這種需求提供了解決方案。在DataStage Director中可以設(shè)置在每天、每周或者每月的某個(gè)時(shí)間運(yùn)行ETL Job。
ETL Job的并行執(zhí)行是IBM WebSphere DataStage企業(yè)版的一大特色。ETL Job開發(fā)好以后,可以在多臺(tái)裝有DataStage Server的機(jī)器上并行執(zhí)行,這也是傳統(tǒng)的手工編碼方式難以做到的。這樣,DataStage就可以充分利用硬件資源。而且,當(dāng)你的硬件資源升級(jí)的時(shí)候也不用修改已經(jīng)開發(fā)好的ETL Job,只需要修改一個(gè)描述硬件資源的文件即可。并行執(zhí)行能力是DataStage所能處理數(shù)據(jù)的速度可以得到趨近于線性的擴(kuò)展,輕松處理大量數(shù)據(jù) 。
我們將要開發(fā)一個(gè)非常簡(jiǎn)單的ETL Job,使大家對(duì)用DataStage進(jìn)行ETL開發(fā)有一個(gè)總體的認(rèn)識(shí)。將要開發(fā)的ETL Job是把DB2數(shù)據(jù)庫(kù)Source中的表employee的內(nèi)容導(dǎo)入到另外一個(gè)DB2數(shù)據(jù)庫(kù)Target中的表employee中去。其中兩個(gè)數(shù)據(jù)庫(kù)中的employee表的結(jié)構(gòu)是相同的。employee表的結(jié)構(gòu)為: ![]() 這里需要說(shuō)明的是,DB2數(shù)據(jù)庫(kù)的Client端必須和DataStage Server裝在同一臺(tái)機(jī)器上面。如果要連接的DB2數(shù)據(jù)庫(kù)的Server和DataStage Server不在同一臺(tái)機(jī)器上面,那么就需要先用和DataStage Server裝在同一臺(tái)機(jī)器上的DB2的Client端提供的工具"配置助手"把要連接的數(shù)據(jù)庫(kù)添加到DB2的Client端當(dāng)中。這就為DataStage連接該數(shù)據(jù)庫(kù)做好了準(zhǔn)備。另外一點(diǎn)需要注意的是,如果你的DataStage Server是安裝在Windows上的,那么做完上面所描述的事情后就可以用DataStage連接DB2數(shù)據(jù)庫(kù)了,但是如果你的DataStage Server是安裝在Linux或者Unix上面的,你還需要配置DataStage的一個(gè)名字叫dsenv文件。因?yàn)槲覀兊睦赢?dāng)中DataStage Server是運(yùn)行在Linux上面的。我們將以Linux為例講述dsenv文件的配置方法。 dsenv文件是主要是用來(lái)存放環(huán)境變量的,這些環(huán)境變量包含了DataStage要用到的類庫(kù),以及要連接的數(shù)據(jù)庫(kù)的安裝的路徑等。dsenv文件位于位于文件夾 $DataStage/DSEngine里面,$DataStage/是DataStage的安裝目錄,例如:/home/dsadm/Ascential/DataStage/。 打開dsenv文件,在文件的最后加上如下內(nèi)容:
這些環(huán)境變量用來(lái)描述DB2的安裝路徑、DB2的實(shí)例、以及DB2類庫(kù)的路徑。配置好這些環(huán)境變量后,我們就可以用DataStage連接DB2了。下面我們正式進(jìn)入開發(fā)環(huán)節(jié)。 (1)用DataStage Administrator登錄到DataStage Server。Host system是安裝DataStage Server的主機(jī),輸入它的IP地址或者主機(jī)名。另外再輸入用戶名和密碼后,單擊按鈕"OK"; ![]() (2)登錄后,在標(biāo)簽Projects中可以看到目前這個(gè)DataStage Server上面所有的項(xiàng)目。單擊按鈕"Add"新建一個(gè)項(xiàng)目; ![]() (3)在彈出的對(duì)話框中輸入項(xiàng)目名SampleProject,項(xiàng)目存儲(chǔ)的默認(rèn)路徑是DataStage安裝路徑的Projects目錄下面,你可以通過(guò)單擊按鈕"Browse"來(lái)改變默認(rèn)路徑。注意不要鉤上選擇框"Create protected project",因?yàn)槿绻^上的話你所創(chuàng)建的工程將沒辦法被改變。單擊按鈕"OK"; ![]() (4)你會(huì)看到在項(xiàng)目列表里面已經(jīng)有了我們剛創(chuàng)建好的項(xiàng)目SampleProject,單擊按鈕"Close"關(guān)閉DataStage Administrator; ![]() (5)用DataStage Designer登陸到DataSatge Server,輸入DataStage Server的IP或主機(jī)名以及用戶名和密碼,并指定Project為我們剛才創(chuàng)建的項(xiàng)目SampleProject。單擊按鈕"OK"; ![]() (6)在DataStage Designer當(dāng)中單擊File‘New去創(chuàng)建一個(gè)新的ETL Job; ![]() (7)選擇"Parallel Job",單擊按鈕"OK"; ![]() (8) 一個(gè)新的ETL Job已經(jīng)創(chuàng)建了,單擊工具欄上的圖標(biāo)"保存",或者用快捷鍵"Ctrl+S"來(lái)保存,這時(shí)候一個(gè)保存ETL Job的對(duì)話框會(huì)彈出來(lái); ![]() (9)在彈出的對(duì)話框中。在Job name一欄輸入"SampleJob",在Category中輸入"Sample"。單擊按鈕"OK"; ![]() (10) 保存好剛創(chuàng)建的ETL Job后,我們用DataStage Designer來(lái)導(dǎo)入數(shù)據(jù)庫(kù)的表結(jié)構(gòu)。在DataStage Designer的左下方的Repository中右鍵單擊"Table Definition"。然后選擇 Import‘Pug-in Meta Data Definitions…; ![]() (11)在彈出的對(duì)話框中選擇DSDB2,單擊按鈕OK; ![]() (12) 在彈出的對(duì)話框中,Server Name選擇Source。輸入用戶名和密碼,再鉤上Tables選擇框之后單擊按鈕Next; ![]() (13)選擇表employee,把要保存到的目錄改成PlugIn\Source。然后單擊按鈕 Import.; ![]() (14)重復(fù)步驟 10-13把存儲(chǔ)在Target數(shù)據(jù)庫(kù)中的表employee的表結(jié)構(gòu)導(dǎo)入進(jìn)來(lái),這次存放的路徑改成PlugIn\Target。完成后,你會(huì)在Repository中看到你導(dǎo)入的表結(jié)構(gòu); ![]() (15)從左邊的palette中拖入兩個(gè)DB2/UDB API Stage到右邊的面板上。DB2/UDB2 API Stage是用來(lái)連接DB2數(shù)據(jù)庫(kù)的,我們這兩個(gè)DB2/UDB API Stage一個(gè)用來(lái)連接數(shù)據(jù)庫(kù)source,另一個(gè)用來(lái)連接數(shù)據(jù)庫(kù)Target; ![]() (16)右鍵單擊左邊的DB2/UDB API Stage不要放開,一直拖拽鼠標(biāo)到右邊的DB2/UDB2 API Stage上面。這時(shí)候在這兩個(gè)Stage之間會(huì)出現(xiàn)一條連線,代表了數(shù)據(jù)的流向。下面我們將配置這兩個(gè)Stage的屬性; ![]() (17)左鍵雙擊左邊的DB2/UDB API Stage,會(huì)彈出如下圖所示的屬性框。在標(biāo)簽Stage的子標(biāo)簽General中,設(shè)置Stage name為Source,Server name為Source,User ID和 Password設(shè)置為右權(quán)限訪問(wèn)這個(gè)數(shù)據(jù)庫(kù)的用戶名和密碼。Transaction Isolation的默認(rèn)的選項(xiàng)是Cursor Stability,保持默認(rèn)選項(xiàng)然后單擊標(biāo)簽Output; ![]() (18)在標(biāo)簽Output的子標(biāo)簽General中,輸入Table names為employee,并在Query type下拉框中選擇Generated SQL Query。這樣DataStage會(huì)自動(dòng)幫你生成大部分的SQL代碼。然后單擊子標(biāo)簽Columns; ![]() (19)在Columns子標(biāo)簽中單擊按鈕Load去導(dǎo)入剛才從數(shù)據(jù)庫(kù)中導(dǎo)進(jìn)來(lái)的表結(jié)構(gòu); ![]() (20)在彈出的對(duì)話框中選擇目錄PlugIn\Source中的表結(jié)構(gòu)employee,然后單擊按鈕OK; ![]() (21) 在彈出的對(duì)話框中選擇要導(dǎo)入的表的列,默認(rèn)是全選,保持默認(rèn)并單擊按鈕OK; ![]() (22) 這時(shí)候你會(huì)看到表的字段已經(jīng)被導(dǎo)入進(jìn)來(lái)。單擊子標(biāo)簽SQL; ![]() (23) 在子標(biāo)簽SQL中,你會(huì)看到系統(tǒng)自動(dòng)生成的SQL語(yǔ)句。單擊按鈕 View Data查看表employee中的數(shù)據(jù); ![]() (24)當(dāng)前employee表中有兩條數(shù)據(jù)。單擊按鈕Close關(guān)掉數(shù)據(jù)查看窗口; ![]() (25)現(xiàn)在我們開始編輯用來(lái)連接目標(biāo)數(shù)據(jù)庫(kù)的DB2/UDB API Stage的屬性。雙擊這個(gè)Stage,彈出的屬性設(shè)置窗口如下圖所示。在標(biāo)簽Stage的子標(biāo)簽General中,Stage name設(shè)置為Target,Server name設(shè)置為Target,User ID和Password分別設(shè)置為有權(quán)限對(duì)Target數(shù)據(jù)庫(kù)進(jìn)行操作的用戶名和密碼。其他屬性保持默認(rèn)值,然后單擊標(biāo)簽Input; ![]() (26)在標(biāo)簽Input的子標(biāo)簽General中,設(shè)置Table name為employee,Update action選擇 Insert rows without cleaning。Create table action選擇Do not create target table。然后單擊子標(biāo)簽Columns; ![]() (27)在子標(biāo)簽Columns中,你會(huì)發(fā)現(xiàn)已經(jīng)有表結(jié)構(gòu)load進(jìn)來(lái)了,這個(gè)表結(jié)構(gòu)是和source數(shù)據(jù)庫(kù)中的employee表的結(jié)構(gòu)一致的。單擊按鈕OK并保存ETL Job; ![]() (28)在工具欄中單擊圖標(biāo)"編譯"對(duì)剛開發(fā)完的ETL Job進(jìn)行編譯; ![]() (29)編譯過(guò)程中會(huì)彈出一個(gè)對(duì)話框顯示編譯的進(jìn)行情況。最終ETL Job編譯成功后對(duì)話框中會(huì)顯示如下圖中所示的消息:"Job successfully compiled with no errors"; ![]() (30)編譯成功后,我們打開DataStage Director來(lái)運(yùn)行我們開發(fā)的ETL Job。從DataStage Designer中打開DataStage Director的方法為:從菜單欄中選擇Tools‘Run Director; ![]() (31)打開DataStage Director后你會(huì)在Sample目錄下面發(fā)現(xiàn)我們開發(fā)好的ETL Job SampleJob,狀態(tài)為Compiled。選擇SampleJob,然后單擊工具欄中的"運(yùn)行"按鈕; ![]() (32)在彈出的對(duì)話框中可以設(shè)置運(yùn)行的參數(shù),比如出現(xiàn)多少個(gè)warning后ETL Job會(huì)自動(dòng)中止掉。我們保持這個(gè)對(duì)話框中的默認(rèn)設(shè)置,單擊按鈕Run; ![]() (33) 這時(shí)候你會(huì)注意到SampleJob的狀態(tài)從Compiled變成了Running,等到SampleJob的狀態(tài)變成Finished后,該ETL Job的運(yùn)行就結(jié)束了; ![]() (34)如下圖所示,SampleJob的狀態(tài)變成了Finished。SampleJob成功結(jié)束運(yùn)行; ![]() (35)到DataStage Designer中,用View Data功能查看目標(biāo)數(shù)據(jù)庫(kù)Target中employee表中的數(shù)據(jù)。你會(huì)發(fā)現(xiàn)和源數(shù)據(jù)庫(kù)source中的employee表中的數(shù)據(jù)是一樣的。也說(shuō)明我們開發(fā)的ETL Job成功的完成了我們想要它完成的任務(wù)。 ![]()
本文首先介紹IBM WebSphere DataStage在數(shù)據(jù)源連接能力以及并行執(zhí)行能力兩方面的特性,接著介紹了它的開發(fā)環(huán)境。最后用一個(gè)簡(jiǎn)單的ETL Job演示了用IBM WebSphere DataStage進(jìn)行ETL開發(fā)的過(guò)程,使大家對(duì)這個(gè)過(guò)程有了一個(gè)比較清楚的了解。IBM WebSphere DataStage提供的圖形化的環(huán)境使我們更容易進(jìn)行開發(fā)和維護(hù)。
|
|