kettle-如何將作業(job)中設置的參數值,傳遞到子轉換(ktr)腳本

用途

如何將作業(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,執行結果如下
    在這裏插入圖片描述
    說明作業中的參數正確傳入到子轉換腳本中:
    在這裏插入圖片描述
發佈了244 篇原創文章 · 獲贊 29 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章