一.插件架構
Kettle採用的是一種插件的架構,開發者可以不用修改Kettle自己的代碼,通過引入獨立開發的代碼即可擴展Kettle的功能。這樣獨立的代碼我們可以成其爲插件。Kettle可以動態的加載並運行這些插件。
以下是Kettle現有插件類型:
- 轉換步驟插件
- 作業項插件
- 分區方法插件
- 數據庫類型插件
- 資源庫類型插件
- 視圖插件
- 大數據插件
Kettle內部對象與外部插件在功能上沒有任何區別,因爲它們使用的是同樣的API,只是在運行時加載方式不同。
Kettle內部有一個插件註冊系統,負責加載各種內部和外部插件,在Kettle環境初始化後,該系統通過讀取以下配置文件來加載內部對象:
- kettle-steps.xml:內部轉換步驟
- kettle-job-entries.xml:內部作業項
- kettle-partition-plugins.xml:內部分區類型
- kettle-database-types.xml:內部數據庫類型
- kettle-repositories.xml:內部資源庫類型
在加載完成所有的內部對象後,就要搜索可用外部插件。這一步通過瀏覽代碼中的plugins/目錄的各個子目錄下的.jar文件來完成,如下圖:
插件有兩個表示屬性:
- 插件類型:類型由PluginTypeInterface接口定義。其實現類有StepPluginType、JobEntryPluginType等。
- 插件ID:一個字符串數組,用來唯一標識一個插件。
上文提到Kettle現有插件類型,下面一一介紹:
二.轉換步驟插件
源碼所在位置org.pentaho.di.trans.steps包下。
轉換步驟插件包括四個Java類,分別實現四個接口:
- StepMetaInterface:提供步驟元數據並處理並行化。
- StepInterface:根據元數據實現具體功能。
- StepDataInterface:用來存儲步驟臨時數據等。
- StepDialogInterface:Spoon裏的圖形界面,用來編輯步驟元數據。
1.StepMetaInterface
此接口負責步驟裏所有和元數據相關的任務。
2.StepDataInterface
實現此接口的類用來維護步驟的執行狀態,以及存儲臨時對象。可以把輸出行的元數據、數據庫連接、輸入輸出流等存儲到這個對象裏。
3.StepDialogInterface
實現此接口的類用來提供一個用戶界面,用戶通過這個界面輸入元數據。
4.StepInterface
實現此接口的類讀取上個步驟傳來的數據行,利用StepMetaInterface對象裏定義的元數據,逐行轉換和處理上個步驟傳來的數據行。通常開發者需要重載以下幾個方法:
- init():步驟初始化方法,如果沒有任何初始化工作,則不用重載這個方法。
- dispose():釋放資源的方法,例如關閉數據庫連接等。
- processRow():實際處理數據的地方,只要該方法返回true,轉換引擎就會重複調用此方法。
三.作業項插件
作業項插件只需要實現兩個接口:
- JobEntryInterface:管理作業項元數據及執行作業項。
- JobEntryDialogInterface:作業項的對話框類,接收用戶輸入元數據。
Kettle中的步驟是並行執行的,作業是串行執行的,是根據所定義的先後順序來執行的。
1.JobEntryInterface
最重要的方法是:
- execute():執行作業項並返回結果對象。
四.分區插件
分區方法決定了一行數據屬於哪個分區,通過分區插件可以根據業務開發新的分區規則。
要實現分區插件,需實現兩個接口:
Partitioner
StepDialogInterface
1.Partitioner
此接口中有一個重要方法需要實現:getPartition()。
歡迎關注公衆號: