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