用途
如何將作業(job)中設置的參數值,傳遞到子轉換(ktr)腳本。
應用場景
爲了保持kettle腳本通用性,一般通過設置命名參數的方式解決。
執行時,通過動態設置參數的達到腳本通用的目的。
例如:腳本job_1,用於計算2組數據,其中時間範圍取值如下:
報告名稱 | 時間範圍 | 開始日期(ksrq) | 結束日期(jsrq) |
---|---|---|---|
報告1 | 當年1月1日到今天0點 | 2020-01-01 | 今日0點 |
報告2 | 昨天0點到今天0點 | 昨天0點 | 今日0點 |
問題描述
- 上述腳本每天都需要手工執行;
- 每次執行時,都需要手工設置開始、結束時間,較爲繁瑣,且人工設置容易出錯;
- 希望在不改變子轉換腳本的前提下,實現參數的自動傳入;
問題分析
由於上述業務需求固定,計劃在作業腳本中,編寫JavaScript腳本,自動計算開始日期,結束日期參數,並將參數傳遞到子轉換腳本中。
1、作業總體流程
1.1、作業命名參數
1.2、設置變量-步驟
/*
如何將作業(job)中設置的參數值,傳遞到子轉換(ktr)腳本
功能:獲取或設置變量
作用域:僅當前作業(job)有效
parent_job.setVariable
parent_job.getVariable
功能:獲取或設置參數變量
作用域:作業(job)和子轉換腳本都有效
parent_job.getParameterValue
parent_job.setParameterValue
*/
// 獲取計算類型:1、計算累計數據,2:計算昨日數據
var useType = parent_job.getVariable("type");
var dateFormat = new java.text.SimpleDateFormat("yyyy-MM-dd");
var date = new java.util.Date();
// 計算今天
date.setDate(date.getDate());
var today = dateFormat.format(date);
// 計算昨天
date.setDate(date.getDate()-1);
var tomorrow = dateFormat.format(date);
if (useType == 1) {
parent_job.setParameterValue("ksrq",parent_job.getVariable("ksrq.default"));
}else{
parent_job.setParameterValue("ksrq",tomorrow);
}
parent_job.setParameterValue("jsrq",today);
true;
2、子轉換
2.1、轉換-命名參數
2.2、獲取系統信息-步驟
2.3、寫日誌-步驟
3、執行結果
3.1、子轉換執行結果
轉換腳本執行時,如果不指定開始日期(ksrq),結束日期(jsrq)參數,執行結果如下:
3.2、作業執行結果
- 使用默認參數的執行結果
開始日期默認爲2020-01-01
- 作業執行時,設置type=2,執行結果如下
說明作業中的參數正確傳入到子轉換腳本中: