數據整合的核心內容是從數據源中抽取數據,然后對這些數據進(jìn)行轉化,最終加載的目標數據庫或者數據倉庫中去,這也就是我們通常所說(shuō)的 ETL 過(guò)程。IBM WebSphere DataStage 為整個(gè) ETL 過(guò)程提供了一個(gè)圖形化的開(kāi)發(fā)環(huán)境。
傳統的數據整合方式需要大量的手工編碼,而采用 IBM WebSphere DataStage 進(jìn)行數據整合可以大大的減少手工編碼的數量,而且更加容易維護。數據整合的核心內容是從數據源中抽取數據,然后對這些數據進(jìn)行轉化,最終加載的目標數據庫或者數據倉庫中去,這也就是我們通常所說(shuō)的ETL過(guò)程。IBM WebSphere DataStage 為整個(gè) ETL 過(guò)程提供了一個(gè)圖形化的開(kāi)發(fā)環(huán)境。本文將從以下幾個(gè)方面來(lái)介紹 IBM WebSphere DataStage:
1. 數據源連接能力
2. 完備的開(kāi)發(fā)環(huán)境
3. ETL Job 的并行執行能力
4. 開(kāi)發(fā)一個(gè)簡(jiǎn)單的 ETL Job
![]() ![]() |
![]()
|
數據整合工具的數據源連接能力是非常重要的,這將直接決定它能夠應用的范圍。IBM WebSphere DataStage 能夠直接連接非常多的數據源,包括:
1、 文本文件
2、 XML 文件
3、 企業(yè)應用程序,比如 SAP、Siebel、Oracle 以及PeopleSoft
4、 幾乎所有的數據庫系統,比如 DB2、Oracle、SQL Server、Informix等
5、 Web services
6、 WebSphere MQ
正是因為這么好的連接能力,IBM WebSphere DataStage 使用戶(hù)能夠專(zhuān)注于數據轉換的邏輯而不用太擔心數據的抽取和加載。
![]() ![]() |
![]()
|
IBM WebSphere DataStage 的開(kāi)發(fā)環(huán)境是基于 C/S 模式的,通過(guò) DataStage Client 連接到DataStage Server 上進(jìn)行開(kāi)發(fā)。這里有一點(diǎn)需要注意,DataStage Client 只能安裝在 Windows 平臺上面。而 DataStage Server 則支持多種平臺,比如 Windows、Redhat Linux、AIX、HP-UNIX。
DataStage Client 有四種客戶(hù)端工具。分別是 DataStage Administrator、DataStage Designer、DataStage Manager、DataStage Director。接下來(lái)首先介紹這幾種客戶(hù)端工具在 DataStage 架構中所處的位置以及它們如何協(xié)同工作來(lái)開(kāi)發(fā) ETL Job 的,接著(zhù)再分別詳細介紹每個(gè)工具的功能。
圖 1 描述了 IBM WebSphere DataStage 的整個(gè)系統架構。DataStage 的客戶(hù)端工具連接到DataStage Server 上進(jìn)行 ETL Job 的開(kāi)發(fā),DataStage Server 再與后臺的數據庫連接起來(lái)進(jìn)行數據處理。DataStage 的客戶(hù)端工具之間的是一個(gè)相互合作的關(guān)系。下面通過(guò)介紹 ETL Job的開(kāi)發(fā)過(guò)程來(lái)介紹他們之間的這種關(guān)系。
1. 用 DataStage Administrator 新建一個(gè)項目;
2. 用 DataStage Designer 連接到這個(gè)新建的項目上進(jìn)行ETL Job的設計;
3. 用 DataStage Director 對設計好的ETL Job設置運行的模式,比如多長(cháng)時(shí)間運行一次ETL Job;
4.用 DataStage Manager 進(jìn)行ETL Job的備份等。

DataStage Administrator 的主要功能有以下幾個(gè):
1. 設置客戶(hù)端和服務(wù)器連接的最大時(shí)間。
以管理員的身份登陸 DataStage Administrator。你就會(huì )看到如下圖所示的畫(huà)面。在這里你可以設置客戶(hù)端和服務(wù)器的最大連接時(shí)間,默認的最大連接時(shí)間是永不過(guò)期。最大連接時(shí)間的意思就是如果客戶(hù)端和服務(wù)器的連接時(shí)間超過(guò)了最大連接時(shí)間,那么客戶(hù)端和服務(wù)器之間的連接將被強行斷開(kāi)。

2. 添加和刪除項目
在 Projects 這個(gè)標簽中,可以新建或者刪除項目,以及設置已有項目的屬性。這里有必要介紹一下項目的概念,要用 DataStage 進(jìn)行 ETL 的開(kāi)發(fā),首先就要用 DataStage Administrator 新建一個(gè)項目,然后在這個(gè)項目里面進(jìn)行 ETL Job 的開(kāi)發(fā)。

3. License的管理
可以在Licensing標簽中更新License。

DataStage Designer是ETL Job開(kāi)發(fā)的核心環(huán)境。值得注意的是,登陸DataStage Designer 的時(shí)候,不僅要指定DataStage Server 的IP,而且要指定連接到這個(gè)DataStage Server上的哪個(gè)項目上面,上面已經(jīng)提到DataStage的項目是由DataStage Administrator 來(lái)創(chuàng )建的。DataStage Designer的主要功能可以概括為以下三個(gè)方面:
1. ETL Job的開(kāi)發(fā)
DataStage Designer里面包含了DataStage為ETL開(kāi)發(fā)已經(jīng)構建好的組件, 主要分為兩種,一種是用來(lái)連接數據源的組件,另一種是用來(lái)做數據轉換的組件。利用這些組件,開(kāi)發(fā)人員可以通過(guò)圖形化的方式進(jìn)行ETL Job的開(kāi)發(fā)。
2. ETL Job的編譯
開(kāi)發(fā)好ETL Job后,可以直接在DataStage Designer里面進(jìn)行編譯。如果編譯不通過(guò),編譯器會(huì )幫助開(kāi)發(fā)人員定位到出錯的地方。
3. ETL Job的執行
編譯成功后,ETL Job就可以執行了,在DataStage Designer里面可以運行ETL Job。ETL Job的運行情況可以在DataStage Director中看到,這方面的內容將在介紹DataStage Director的時(shí)候提到。
DataStage Manager主要用來(lái)管理項目資源。一個(gè)項目可能包含多個(gè)ETL Job,可以用DataStage Manager把一個(gè)項目里面的ETL Job導出來(lái)。然后再用DataStage Manager導入到另外一個(gè)項目中去,利用這個(gè)功能一方面可以實(shí)現ETL Job的備份,另一方面就是可以在多個(gè)項目之間來(lái)重復使用開(kāi)發(fā)好的ETL Job。在DataStage Manager里面可以把數據庫中的表結構直接導入到項目中來(lái),供這個(gè)項目中的所有ETL Job使用。DataStage Designer也提供了從數據庫中直接導入表結構的功能。
DataStage Director 主要有以下兩個(gè)功能:
1. 監測ETL Job的運行狀態(tài)
ETL Job在DataStage Designer中編譯好后,可以通過(guò)DataStage Director來(lái)運行它。前面在介紹DataStage Designer的時(shí)候提到在DataStage Designer中也可以運行ETL Job,但是如果要監測ETL Job的運行情況還是要登陸到DataStage Director中。在這里,你可以看到ETL Job運行的詳細的日志文件,還可以查看一些統計數據,比如ETL Job每秒所處理的數據量。
2. 設置何時(shí)運行ETL Job
ETL Job開(kāi)發(fā)完成后,我們可能希望ETL Job在每天的某個(gè)時(shí)間都運行一次。DataStage Director為這種需求提供了解決方案。在DataStage Director中可以設置在每天、每周或者每月的某個(gè)時(shí)間運行ETL Job。
![]() ![]() |
![]()
|
ETL Job的并行執行是IBM WebSphere DataStage企業(yè)版的一大特色。ETL Job開(kāi)發(fā)好以后,可以在多臺裝有DataStage Server的機器上并行執行,這也是傳統的手工編碼方式難以做到的。這樣,DataStage就可以充分利用硬件資源。而且,當你的硬件資源升級的時(shí)候也不用修改已經(jīng)開(kāi)發(fā)好的ETL Job,只需要修改一個(gè)描述硬件資源的文件即可。并行執行能力是DataStage所能處理數據的速度可以得到趨近于線(xiàn)性的擴展,輕松處理大量數據
。![]() ![]() |
![]()
|
開(kāi)發(fā)一個(gè)簡(jiǎn)單的ETL Job
我們將要開(kāi)發(fā)一個(gè)非常簡(jiǎn)單的ETL Job,使大家對用DataStage進(jìn)行ETL開(kāi)發(fā)有一個(gè)總體的認識。將要開(kāi)發(fā)的ETL Job是把DB2數據庫Source中的表employee的內容導入到另外一個(gè)DB2數據庫Target中的表employee中去。其中兩個(gè)數據庫中的employee表的結構是相同的。employee表的結構為:

這里需要說(shuō)明的是,DB2數據庫的Client端必須和DataStage Server裝在同一臺機器上面。如果要連接的DB2數據庫的Server和DataStage Server不在同一臺機器上面,那么就需要先用和DataStage Server裝在同一臺機器上的DB2的Client端提供的工具"配置助手"把要連接的數據庫添加到DB2的Client端當中。這就為DataStage連接該數據庫做好了準備。另外一點(diǎn)需要注意的是,如果你的DataStage Server是安裝在Windows上的,那么做完上面所描述的事情后就可以用DataStage連接DB2數據庫了,但是如果你的DataStage Server是安裝在Linux或者Unix上面的,你還需要配置DataStage的一個(gè)名字叫dsenv文件。因為我們的例子當中DataStage Server是運行在Linux上面的。我們將以L(fǎng)inux為例講述dsenv文件的配置方法。
dsenv文件是主要是用來(lái)存放環(huán)境變量的,這些環(huán)境變量包含了DataStage要用到的類(lèi)庫,以及要連接的數據庫的安裝的路徑等。dsenv文件位于位于文件夾 $DataStage/DSEngine里面,$DataStage/是DataStage的安裝目錄,例如:/home/dsadm/Ascential/DataStage/。
打開(kāi)dsenv文件,在文件的最后加上如下內容:
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)境變量用來(lái)描述DB2的安裝路徑、DB2的實(shí)例、以及DB2類(lèi)庫的路徑。配置好這些環(huán)境變量后,我們就可以用DataStage連接DB2了。下面我們正式進(jìn)入開(kāi)發(fā)環(huán)節。
(1)用DataStage Administrator登錄到DataStage Server。Host system是安裝DataStage Server的主機,輸入它的IP地址或者主機名。另外再輸入用戶(hù)名和密碼后,單擊按鈕"OK";

(2)登錄后,在標簽Projects中可以看到目前這個(gè)DataStage Server上面所有的項目。單擊按鈕"Add"新建一個(gè)項目;

(3)在彈出的對話(huà)框中輸入項目名SampleProject,項目存儲的默認路徑是DataStage安裝路徑的Projects目錄下面,你可以通過(guò)單擊按鈕"Browse"來(lái)改變默認路徑。注意不要鉤上選擇框"Create protected project",因為如果鉤上的話(huà)你所創(chuàng )建的工程將沒(méi)辦法被改變。單擊按鈕"OK";

(4)你會(huì )看到在項目列表里面已經(jīng)有了我們剛創(chuàng )建好的項目SampleProject,單擊按鈕"Close"關(guān)閉DataStage Administrator;

(5)用DataStage Designer登陸到DataSatge Server,輸入DataStage Server的IP或主機名以及用戶(hù)名和密碼,并指定Project為我們剛才創(chuàng )建的項目SampleProject。單擊按鈕"OK";

(6)在DataStage Designer當中單擊File‘New去創(chuàng )建一個(gè)新的ETL Job;

(7)選擇"Parallel Job",單擊按鈕"OK";

(8) 一個(gè)新的ETL Job已經(jīng)創(chuàng )建了,單擊工具欄上的圖標"保存",或者用快捷鍵"Ctrl+S"來(lái)保存,這時(shí)候一個(gè)保存ETL Job的對話(huà)框會(huì )彈出來(lái);

(9)在彈出的對話(huà)框中。在Job name一欄輸入"SampleJob",在Category中輸入"Sample"。單擊按鈕"OK";

(10) 保存好剛創(chuàng )建的ETL Job后,我們用DataStage Designer來(lái)導入數據庫的表結構。在DataStage Designer的左下方的Repository中右鍵單擊"Table Definition"。然后選擇 Import‘Pug-in Meta Data Definitions…;

(11)在彈出的對話(huà)框中選擇DSDB2,單擊按鈕OK;

(12) 在彈出的對話(huà)框中,Server Name選擇Source。輸入用戶(hù)名和密碼,再鉤上Tables選擇框之后單擊按鈕Next;

(13)選擇表employee,把要保存到的目錄改成PlugIn\Source。然后單擊按鈕 Import.;

(14)重復步驟 10-13把存儲在Target數據庫中的表employee的表結構導入進(jìn)來(lái),這次存放的路徑改成PlugIn\Target。完成后,你會(huì )在Repository中看到你導入的表結構;

(15)從左邊的palette中拖入兩個(gè)DB2/UDB API Stage到右邊的面板上。DB2/UDB2 API Stage是用來(lái)連接DB2數據庫的,我們這兩個(gè)DB2/UDB API Stage一個(gè)用來(lái)連接數據庫source,另一個(gè)用來(lái)連接數據庫Target;

(16)右鍵單擊左邊的DB2/UDB API Stage不要放開(kāi),一直拖拽鼠標到右邊的DB2/UDB2 API Stage上面。這時(shí)候在這兩個(gè)Stage之間會(huì )出現一條連線(xiàn),代表了數據的流向。下面我們將配置這兩個(gè)Stage的屬性;

(17)左鍵雙擊左邊的DB2/UDB API Stage,會(huì )彈出如下圖所示的屬性框。在標簽Stage的子標簽General中,設置Stage name為Source,Server name為Source,User ID和 Password設置為右權限訪(fǎng)問(wèn)這個(gè)數據庫的用戶(hù)名和密碼。Transaction Isolation的默認的選項是Cursor Stability,保持默認選項然后單擊標簽Output;

(18)在標簽Output的子標簽General中,輸入Table names為employee,并在Query type下拉框中選擇Generated SQL Query。這樣DataStage會(huì )自動(dòng)幫你生成大部分的SQL代碼。然后單擊子標簽Columns;

(19)在Columns子標簽中單擊按鈕Load去導入剛才從數據庫中導進(jìn)來(lái)的表結構;

(20)在彈出的對話(huà)框中選擇目錄PlugIn\Source中的表結構employee,然后單擊按鈕OK;

(21) 在彈出的對話(huà)框中選擇要導入的表的列,默認是全選,保持默認并單擊按鈕OK;

(22) 這時(shí)候你會(huì )看到表的字段已經(jīng)被導入進(jìn)來(lái)。單擊子標簽SQL;

(23) 在子標簽SQL中,你會(huì )看到系統自動(dòng)生成的SQL語(yǔ)句。單擊按鈕 View Data查看表employee中的數據;

(24)當前employee表中有兩條數據。單擊按鈕Close關(guān)掉數據查看窗口;

(25)現在我們開(kāi)始編輯用來(lái)連接目標數據庫的DB2/UDB API Stage的屬性。雙擊這個(gè)Stage,彈出的屬性設置窗口如下圖所示。在標簽Stage的子標簽General中,Stage name設置為T(mén)arget,Server name設置為T(mén)arget,User ID和Password分別設置為有權限對Target數據庫進(jìn)行操作的用戶(hù)名和密碼。其他屬性保持默認值,然后單擊標簽Input;

(26)在標簽Input的子標簽General中,設置Table name為employee,Update action選擇 Insert rows without cleaning。Create table action選擇Do not create target table。然后單擊子標簽Columns;

(27)在子標簽Columns中,你會(huì )發(fā)現已經(jīng)有表結構load進(jìn)來(lái)了,這個(gè)表結構是和source數據庫中的employee表的結構一致的。單擊按鈕OK并保存ETL Job;

(28)在工具欄中單擊圖標"編譯"對剛開(kāi)發(fā)完的ETL Job進(jìn)行編譯;

(29)編譯過(guò)程中會(huì )彈出一個(gè)對話(huà)框顯示編譯的進(jìn)行情況。最終ETL Job編譯成功后對話(huà)框中會(huì )顯示如下圖中所示的消息:"Job successfully compiled with no errors";

(30)編譯成功后,我們打開(kāi)DataStage Director來(lái)運行我們開(kāi)發(fā)的ETL Job。從DataStage Designer中打開(kāi)DataStage Director的方法為:從菜單欄中選擇Tools‘Run Director;

(31)打開(kāi)DataStage Director后你會(huì )在Sample目錄下面發(fā)現我們開(kāi)發(fā)好的ETL Job SampleJob,狀態(tài)為Compiled。選擇SampleJob,然后單擊工具欄中的"運行"按鈕;

(32)在彈出的對話(huà)框中可以設置運行的參數,比如出現多少個(gè)warning后ETL Job會(huì )自動(dòng)中止掉。我們保持這個(gè)對話(huà)框中的默認設置,單擊按鈕Run;

(33) 這時(shí)候你會(huì )注意到SampleJob的狀態(tài)從Compiled變成了Running,等到SampleJob的狀態(tài)變成Finished后,該ETL Job的運行就結束了;

(34)如下圖所示,SampleJob的狀態(tài)變成了Finished。SampleJob成功結束運行;

(35)到DataStage Designer中,用View Data功能查看目標數據庫Target中employee表中的數據。你會(huì )發(fā)現和源數據庫source中的employee表中的數據是一樣的。也說(shuō)明我們開(kāi)發(fā)的ETL Job成功的完成了我們想要它完成的任務(wù)。

![]() ![]() |
![]()
|
本文首先介紹IBM WebSphere DataStage在數據源連接能力以及并行執行能力兩方面的特性,接著(zhù)介紹了它的開(kāi)發(fā)環(huán)境。最后用一個(gè)簡(jiǎn)單的ETL Job演示了用IBM WebSphere DataStage進(jìn)行ETL開(kāi)發(fā)的過(guò)程,使大家對這個(gè)過(guò)程有了一個(gè)比較清楚的了解。IBM WebSphere DataStage提供的圖形化的環(huán)境使我們更容易進(jìn)行開(kāi)發(fā)和維護。
![]() | ||
|
| ![]() | 周登朋,上海交通大學(xué)研究生,熟悉DB2, IBM WebSphere DataStage. 對數據整合以及Java技術(shù)非常感興趣。 Email:zhoudengpeng@yahoo.com.cn |
聯(lián)系客服