kettle-如何将作业(job)中设置的参数值,传递到子转换(ktr)脚本

大兔子大兔子 提交于 2020-02-03 10:55:50

用途

如何将作业(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,执行结果如下
    在这里插入图片描述
    说明作业中的参数正确传入到子转换脚本中:
    在这里插入图片描述
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!