Kettle4.3源碼分析

1:在使用kettle的表輸入插件,抽取Mysql數據的時候 會報如下的一個錯誤

You have a
n error in your SQL syntax; check the manual that corresponds to your MySQL serv
er version for the right syntax to use near 'OPTION SQL_SELECT_LIMIT=DEFAULT' at

   這個錯誤的原因是mysql的驅動版本太低。。我原來用的 mysql-connector-java-5.1.7-bin.jar。後來改爲

   mysql-connector-java-5.1.30-bin就正常了。

 

2:kettle的JobEntryLoader--Job啓動初始化類

調用順序:Spoon-->main-->initPlugins()-->JobEntryLoader.init()。

在這裏Kettle會把所有的Job插件讀取放到

private List<JobPlugin> pluginList 的一個成員變量裏面。



 

 

每個節點下都有很多插件,大概一共有60多個,所以初始化完後pluginList的size應該也是60多

下面看一下JobPlugin的內部結構



 

根據以上的堆棧信息,當我們需要查找一個Job插件的時候,JobEntryLoader 提供的一些方法就非常好理解了。


                         

而且注意的是JobPlugin的type 值都是 1。findJobPluginWithId 和 findJobEntriesWithId 的內部源碼是一樣的。
 

3:如何創建一個作業JobMeta

一個作業叫做一個JobMeta,特別注意的是作業不是作業步驟,作業是文件菜單下新建作業的那個作業,是所有作業步驟的容器。

源碼位置:Spoon--newJobFile()

調用順序:Spoon-main-init-addMenu-addMenuListeners--ProupMenu的菜單點擊事件

核心代碼:

JobMeta jobMeta = new JobMeta(log);

jobMeta.addObserver(this);

jobMeta.setName(STRING_JOB + " " + nr);

如果直接將作業保存爲一個文件,可以將setName改爲調用setFilename(String filename);

 

4:如何創建一個轉換TransMeta

源碼位置:Spoon--newTransFile()

核心代碼:

TransMeta transMeta = new TransMeta();

transMeta.addObserver(this);

transMeta.setName(STRING_TRANSFORMATION + " " + nr);

總體模式和創建JobMeta類似,代碼調用順序也可以參考JobMeta

 

5:資源庫Repository相關源碼

RepositoriesMeta input = new RepositoriesMeta(log);//注意是帶s的

input.readData();//讀取連接信息

那麼問題是kettle去哪裏讀取資源庫連接信息呢

看readData裏面的代碼裏就可以知道答案

首先他會查找bin/embedded/.creator/repositories.xml文件,

如果沒有就會去查找NVL(System.getProperty("CREATOR_HOME"), System.getProperty("user.home"))++ FILE_SEPARATOR + BasePropertyHandler.getProperty("userBaseDir", ".kettle"); 路徑下的repositories.xml

在windows下就是我的文檔目錄下。

 

找到配置文件後就開始讀取裏面的配置了--readData裏面的關鍵代碼:



 其中repinfo.loadXml(repnode,databases) 是在databases中查找默認資源庫對應的連接,將相應的DatabaseMeta賦給repinfo。

 

實例化一個資源庫:構造方法public Repository(LogWriter log, RepositoryMeta repinfo, UserInfo userinfo)

repinfo可以從RepositoriesMeta裏獲取,userinfo就是登陸的用戶信息,主要是用戶名和密碼。

然後調用Repository的connect方法可以測試是否可以連接到資源庫。

 

6:創建一個Job步驟,JobEntryCopy

源碼位置:SpoonJobDelegate--newJobEntry

需要說明的代碼:

 isSpecial()-->開始和空操作兩個步驟是special

如果是開始步驟,則判斷面板中是否已經有改步驟,如果有,則給出錯誤提示。

如果是空操作,則把空標誌設置爲true。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章