kettle-如何在作業job中使用JavaScript腳本

如何在作業job中使用JavaScript腳本

描述(Description)

使用JavaScript作業條目來計算布爾表達式。結果可用於確定下一步將要執行的步驟。您可以使用函數,過程調用,“與”,“與”號,“或”,“等式”等。Javascript作業條目會評估並返回true或false。

評估(Evaluation)

JavaScript作業條目的結果爲true或false。換句話說,它需要以布爾表達式結尾。

下面是一些可能的評估,以結束您的腳本:

lines_input > 100

或者

true

或者

parent_job.getVariable("INPUT_DIRECTORY").equals("/tmp");

以下變量可用於表達式:

注意:確保您指定了從中選擇“ lines_input”和其他數字的步驟。否則,值將保持爲0。打開轉換文件,然後在“轉換設置”對話框的“日誌”選項卡中執行此操作。

變量 描述
errors 上一個作業條目中的錯誤數(long)
lines_input 從數據庫或文件讀取的行數(long)
lines_output 寫入數據庫或文件的行數(long)
lines_updated 數據庫表中更新的行數(long)
lines_read 從上一個轉換步驟讀取的行數(long)
lines_writer 寫入下一個轉換步驟的行數(long)
files_retrieved 從FTP服務器檢索的文件數(long)
exit_status Shell腳本的退出狀態(integer)
nr(Integer) 前一個作業條目的作業條目號(long);在下一個工作條目中遞增
is_windows 如果Pentaho Data Integration在Windows上運行,則使用(布爾值)
parent_job 當前作業條目的父作業(org.pentaho.di.job.Job類)
entry 當前作業條目(org.pentaho.di.job.entries.JobEntryEval類)

變量(Variables)

這是評估變量字符串內容的方法:

parent_job.getVariable("NR_OF_ROWS") == 1000000 

由於我們可以訪問parent_job對象,因此我們也可以通過以下方式在父作業中設置變量:

parent_job.setVariable("NR_OF_ROWS", "1000000");

請注意,setVariable調用的計算結果爲false。在其後放一個“ true”,以避免該步評估爲false並引發錯誤。

例如,您可以執行以下操作來操作此作業條目中的變量:

useDate = parent_job.getVariable("use_date").equals("1");
if (useDate == 0) { //We get to use native java classes as this is using Rhino mocks???
	date = new java.util.Date();
	date.setDate(date.getDate()-1); //Go back 1 full day
	dateFormat = new java.text.SimpleDateFormat("yyyyMMdd");
	newDateStr = dateFormat.format(date);
	parent_job.setVariable("start_date", newDateStr);
}
true;

上一步驟的結果(Previous result)

作業條目完成後,執行結果將是一個Result對象,向JavaScript引擎公開爲“ previous_result”:

表達式 替代 數據類型 含義
previous_result.getResult() boolean 如果先前的作業條目已成功執行,則爲true;如果存在某些錯誤,則爲false。
previous_result.getExitStatus() exit_status int 前一個Shell腳本作業條目的退出狀態
previous_result.getEntryNr() nr int 每次執行作業條目時,條目號都會增加。
previous_result.getNrErrors() errors long 錯誤數,也可以作爲變量“錯誤”使用
previous_result.getNrLinesInput() lines_input long 從文件或數據庫讀取的行數
previous_result.getNrLinesOutput() lines_output long 寫入文件或數據庫的行數
previous_result.getNrLinesRead() lines_read long 從上一步讀取的行數
previous_result.getNrLinesUpdated() lines_updated long 文件或數據庫中更新的行數
previous_result.getNrLinesWritten() lines_writer long 寫入下一步的行數
previous_result.getNrLinesDeleted() lines_deleted long 刪除的行數
previous_result.getNrLinesRejected() lines_rejected long 通過錯誤處理拒絕並傳遞到另一步驟的行數
previous_result.getRows() List 結果行,另請參見下文。
previous_result.isStopped() boolean 標記以指示上一個先前的作業條目是否停止。
previous_result.getResultFilesList() List 上一個作業條目中使用的所有文件的列表
previous_result.getNrFilesRetrieved() files_retrieved int 從FTP,SFTP等檢索到的文件數。
previous_result.getLogText() String 上一個作業條目及其子執行的日誌文本。
previous_result.getLogChannelId() String 上一個作業條目的日誌通道的ID。您可以使用它在日誌通道日誌表中查找有關執行沿襲的信息。
is_windows Boolean 如果作業在Windows變體上運行,則爲true,否則爲false。

平臺(Platform)

我們還公開了一個名爲“ is_windows”的變量,以幫助您做出特定於平臺的選擇

行數(rows)

我們向JavaScript公開的“rows”變量可幫助您使用“將行復制到結果”步驟評估傳遞到下一個作業條目的結果行。
這是有關如何使用此數組的示例腳本:


var firstRow = rows[0];
 
firstRow.getString("name", "").equals("Foo")

該腳本將遵循綠色作業跳(green job hop),即表達式的值爲真。如果字段“name”包含字符串“ Foo”,則會發生這種情況。

原文

https://wiki.pentaho.com/pages/viewpage.action?pageId=4358187

發佈了244 篇原創文章 · 獲贊 29 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章