2015-11-30 63 views
0

我想通過代碼定義Pentaho Kettle(ktr)轉換。我想添加到文本文件輸入步驟:http://wiki.pentaho.com/display/EAI/Text+File+Input轉換。我不知道如何做到這一點(請注意,我想在自定義Java應用程序中實現結果,而不是使用標準的Spoon GUI)。我認爲我應該使用TextFileInputMeta類,但是當我嘗試定義文件名時,轉換不再起作用(它在勺子中似乎是空的)。Pentaho SDK,如何定義文本文件輸入

這是我正在使用的代碼。我覺得第三行有一些錯誤:

PluginRegistry registry = PluginRegistry.getInstance(); 
TextFileInputMeta fileInMeta = new TextFileInputMeta(); 
fileInMeta.setFileName(new String[] {myFileName}); 
String fileInPluginId = registry.getPluginId(StepPluginType.class, fileInMeta); 
StepMeta fileInStepMeta = new StepMeta(fileInPluginId, myStepName, fileInMeta); 
fileInStepMeta.setDraw(true); 
fileInStepMeta.setLocation(100, 200); 
transAWMMeta.addStep(fileInStepMeta);   

回答

3

以編程方式運行轉換,你應該做到以下幾點:

  1. 初始化水壺
  2. 準備TransMeta對象
  3. 準備你的腳步
    • 不要忘記元和數據對象!
  4. 它們添加到TransMeta
  5. 創建Trans並運行它
    • 默認情況下,每個轉化發芽每一步一個線程,所以使用trans.waitUntilFinished()強迫你的線程等待,直到執行完成
  6. 必要時提交執行結果

以此測試爲例:https://github.com/pentaho/pentaho-kettle/blob/master/test/org/pentaho/di/trans/steps/textfileinput/TextFileInputTests.java

此外,我建議您手動創建轉換並從文件加載它,如果它適合您的情況。這將有助於避免大量的樣板代碼。在這種情況下運行轉換非常容易,請參閱此處的示例:https://github.com/pentaho/pentaho-kettle/blob/master/test/org/pentaho/di/TestUtilities.java#L346

+0

謝謝。不幸的是,我不能從文件加載轉換,我必須從頭開始創建它。您發佈的關於「TextFileInputMeta」的代碼給了我關於不推薦使用的類的警告(如「TextFileInputField」),我不知道如何解決。無論如何,現在我正在使用「CsvInputMeta」。它效果更好。但我應該以類似於Spoon中的「Get fields」按鈕的方式加載字段。我怎樣才能獲得這個? – ufo

+0

@ufo,在6.0中,TextFileInput步驟已被棄用,並推薦一個全新的(重構的) - https://github.com/pentaho/pentaho-kettle/blob/master/engine/src/org/pentaho/di/ trans/steps/fileinput/text/TextFileInput.java。 如果你在這裏發佈你的代碼,我可以嘗試幫助你。沒有看到你的麻煩在哪裏它真的很難猜測:) –