Oracle ODI系列之一(ODI知識模塊)
ODI簡介
ODI(Oracle Data Integrator)前身是Sunopsis Active Integration Platform,在2006年底被Oracle收購,重新命名為Oracle Data Integrator。主要定位於在ETL和數據集成的場景里使用。ODI和Oracle原來的ETL工具OWB相比有一些顯著的特點,比如和OWB一樣是ELT架構,但是比OWB支持更多的異構的數據源等等,本系列文章將逐步介紹ODI的一些基本概念。
什么是ODI的知識模塊
個人覺得Oracle的Data Integrator里最好最有特點的特征是提出了知識模塊的概念(Knowledge Module)。ETL的發展總是從手工編程開始,然后逐漸出現專門的ETL工具,其實我們在項目里所能夠遇到的一些場景(如把文件載到數據庫,從Mysql數據庫抓取數據放到Oracle數據庫里,從DB2把數據抓取出來放在Oracle數據庫里等)撇開這些數據抽取和轉換工作的業務部分,其實總是可以總結為
file->Oracle
Mysql->Oracle
DB2->Oracle
Oracle->DB2
。。。
如果撇開具體的項目不談,這些都是一些被反復使用的場景,ODI提出了知識模塊的概念,把這些場景的詳細的實現步驟作為一個一個的知識模塊並使用Jython腳本語言結合數據庫的SQL語句錄制成一步一步的步驟忠實地記錄下來,這樣就形成了ODI里的100多個知識模塊,基本上包含了所有普通應用所涉及到的所有場景。更方便的是,用戶既可以直接使用ODI的知識模塊完成數據的獲取工作,也可以直接在知識模塊上面做各種定制,比如某一個業務場景可能並不需要知識模塊里的某一個特定的步驟,那就可以直接把該步驟刪除掉從而提供更好的性能。當然用戶也可以完全自己來開發這些知識模塊。
ODI知識模塊(Knowledge Module)的分類
ODI的知識模塊主要分為幾個大類(RKM,CKM,LKM,IKM,SKM),其中最重要的是LKM(load KM)和IKM(Integration KM)
RKM:RKM完成從源系統和目標系統的數據結構的反向工程來形成數據模型的功能。
CKM:CKM完成數據質量檢查。
LKM:LKM完成從源數據庫數據加載到臨時表。
IKM:IKM完成從臨時表的數據加載到目標表。
SKM:SKM完成ODI和WEB服務接口的功能。
SKM(Service KM):Web服務知識模塊,可以使用該知識模塊來生成Web服務調用
ODI認為一個數據的流動包含從源表到臨時表,然后從臨時表到目標表的過程,而臨時表可以放在源上,或者放在目標數據庫上,可以自己選擇。(當然,通過自己來改動KM也完全可以對這個概念做改動,甚至可以使用一個KM完成所有的工作)。
如下圖(臨時表放在目標數據庫上,然后數據的轉換在目標數據庫上完成):
如何定制知識模塊
這里我們通過分析一個具體的知識模塊來看看知識模塊的概念。一個項目需要先把項目里用到的知識模塊導入進來:雙擊相應知識模塊,就會出現知識模塊里的具體步驟:如下圖上面顯示了一個使用Oracle的dblink技術來完成從一個Oracle數據庫里把數據導入臨時區的LKM的詳細步驟,雙擊一個步驟則會顯示這個步驟完成的具體的命令:上圖窗口下方就是完成這個步驟的具體命令,不同的知識模塊,不同的步驟,顯示的可能不太一樣,有些像是SQL語句,有些則象JAVA語言(Jython腳本),然后還會出現一些類似snpRef.getInfo()的函數,關於這些宏變量和函數的具體含義可以從ODI的參考文檔里找到,上圖的這個步驟最終生成的其實是一個創建dblink的sql命令。每一個知識模塊的步驟既可以刪除,也可以增加,所以可以非常容易地實現ODI的擴展。通過在一個原有的知識模塊上修改形成新的知識模塊是最容易的定制方式,另一種方式是完全可以通過Jython這種語言來寫知識模塊,則是一種更加靈活和復雜的知識模塊的定制方式
