Mars‘s docMars‘s doc
🏠主页
  • 🍻Activiti

    • 01-核心API
    • 02-监听
    • 03-数据库表介绍
    • 04-常见问题
  • 📊JasperReport

    • 01-JaspersoftStudio工具使用
    • 02-JasperReport集成
    • 03-JasperReport常见问题
  • 🎬JavaScript

    • 01-Node
    • 02-VuePress
    • 03-Vue组件高度宽度
    • 04-显示器和屏幕高度
    • 05-页面地址
    • 06-归纳总结
  • 🍵Java

    • 01-Java8特性
    • 02-多线程
    • 03-Jar包
    • 04-Util
    • 05-validation注解
    • 06-反编译
    • 07-try-with-resource
    • 08-ThreadLocal内存泄漏
    • 09-Jvm
    • 10-Excel
    • 11-Lombook
    • 12-条件注解
    • 13-WebMvcConfigurationSupport
    • 14-WebMvcConfigurer
    • 15-分布式锁
    • 16-Caffeine
    • 17-DynamicDatasource
    • 18-MybatisPlus
    • 19-Swagger
    • 20-BeanPostProcessor
    • 21-Bean初始化
    • 22-ConfigurableApplicationContext
    • 23-常用注解
    • 24-ApplicationListener
    • 25-JavaDoc
    • 26-Spring-Cache
    • 27-StopWatch耗时统计
    • 28-Word
    • 29-Druid
    • 30-OpenFeign
    • 31-反射相关
    • 32-Fastjson
    • 33-Yaml
  • 💻Linux

    • 01-Linux常用命令
    • 02-Linux脚本汇总
    • 03-Yum源
    • 04-Debian
    • 05-Ubuntu
  • 🐋Docker

    • 01-Docker常用命令
    • 02-Dockerfile
    • 03-Swarm
    • 04-Stack
    • 05-Docker常见问题
    • 06-DockerCompose
    • 07-Docker应用用汇总
    • 08-Kasm
    • 09-Rustdesk
  • 🌐Nginx

    • 01-Nginx
  • 📈数据库

    • 01-Mysql
    • 02-Clickhouse
    • 03-Doris
    • 04-DRDS
  • 📉Kettle

    • 01-入门
    • 02-js脚本
    • 03-优化
    • 04-连接组件
    • 05-参数
    • 06-工具
    • 07-日志
    • 08-流程组件
    • 09-输入组件
    • 10-输出组件
    • 11-转换组件
    • 12-驱动
  • 🎨Git

    • 01-Git使用
  • 📝Maven

    • 01-Maven使用
    • 02-Maven配置
  • 🎯Jenkins

    • 01-Jenkins部署
    • 02-Jenkisn常见问题
  • 01-设计模式之禅
  • 02-领域驱动设计
  • 03-JavaScript高级程序设计
  • 🍓树莓派

    • 01-RaspBerry
  • 📘Markdown

    • 01-Markdown语法
    • 02-Markdown表情
    • 03-Markdown代码块语言对照
  • 📇其他

    • 01-HTML XML 转义
    • 02-GitHub
    • 03-Idea
    • 04-Nmon
    • 05-Windows
    • 06-WinSw
GitHub
🏠主页
  • 🍻Activiti

    • 01-核心API
    • 02-监听
    • 03-数据库表介绍
    • 04-常见问题
  • 📊JasperReport

    • 01-JaspersoftStudio工具使用
    • 02-JasperReport集成
    • 03-JasperReport常见问题
  • 🎬JavaScript

    • 01-Node
    • 02-VuePress
    • 03-Vue组件高度宽度
    • 04-显示器和屏幕高度
    • 05-页面地址
    • 06-归纳总结
  • 🍵Java

    • 01-Java8特性
    • 02-多线程
    • 03-Jar包
    • 04-Util
    • 05-validation注解
    • 06-反编译
    • 07-try-with-resource
    • 08-ThreadLocal内存泄漏
    • 09-Jvm
    • 10-Excel
    • 11-Lombook
    • 12-条件注解
    • 13-WebMvcConfigurationSupport
    • 14-WebMvcConfigurer
    • 15-分布式锁
    • 16-Caffeine
    • 17-DynamicDatasource
    • 18-MybatisPlus
    • 19-Swagger
    • 20-BeanPostProcessor
    • 21-Bean初始化
    • 22-ConfigurableApplicationContext
    • 23-常用注解
    • 24-ApplicationListener
    • 25-JavaDoc
    • 26-Spring-Cache
    • 27-StopWatch耗时统计
    • 28-Word
    • 29-Druid
    • 30-OpenFeign
    • 31-反射相关
    • 32-Fastjson
    • 33-Yaml
  • 💻Linux

    • 01-Linux常用命令
    • 02-Linux脚本汇总
    • 03-Yum源
    • 04-Debian
    • 05-Ubuntu
  • 🐋Docker

    • 01-Docker常用命令
    • 02-Dockerfile
    • 03-Swarm
    • 04-Stack
    • 05-Docker常见问题
    • 06-DockerCompose
    • 07-Docker应用用汇总
    • 08-Kasm
    • 09-Rustdesk
  • 🌐Nginx

    • 01-Nginx
  • 📈数据库

    • 01-Mysql
    • 02-Clickhouse
    • 03-Doris
    • 04-DRDS
  • 📉Kettle

    • 01-入门
    • 02-js脚本
    • 03-优化
    • 04-连接组件
    • 05-参数
    • 06-工具
    • 07-日志
    • 08-流程组件
    • 09-输入组件
    • 10-输出组件
    • 11-转换组件
    • 12-驱动
  • 🎨Git

    • 01-Git使用
  • 📝Maven

    • 01-Maven使用
    • 02-Maven配置
  • 🎯Jenkins

    • 01-Jenkins部署
    • 02-Jenkisn常见问题
  • 01-设计模式之禅
  • 02-领域驱动设计
  • 03-JavaScript高级程序设计
  • 🍓树莓派

    • 01-RaspBerry
  • 📘Markdown

    • 01-Markdown语法
    • 02-Markdown表情
    • 03-Markdown代码块语言对照
  • 📇其他

    • 01-HTML XML 转义
    • 02-GitHub
    • 03-Idea
    • 04-Nmon
    • 05-Windows
    • 06-WinSw
GitHub
  • 🏫技术相关

    • 🍻Activiti

      • 01-核心API
      • 02-监听
      • 03-数据库表介绍
      • 04-常见问题
    • 📊JasperReport

      • 01-JaspersoftStudio工具使用
      • 02-JasperReport集成
      • 03-JasperReport常见问题
    • 🎬JavaScript

      • 01-Node
      • 02-VuePress
      • 03-Vue组件高度宽度
      • 04-显示器和屏幕高度
      • 05-页面地址
      • 06-归纳总结
    • 🍵Java

      • 01-Java8特性
      • 02-多线程
      • 03-Jar包
      • 04-Util
      • 05-validation注解
      • 06-反编译
      • 07-try-with-resource
      • 08-ThreadLocal内存泄漏
      • 09-Jvm
      • 10-Excel
      • 11-Lombook
      • 12-条件注解
      • 13-WebMvcConfigurationSupport
      • 14-WebMvcConfigurer
      • 15-分布式锁
      • 16-Caffeine
      • 17-DynamicDatasource
      • 18-MybatisPlus
      • 19-Swagger
      • 20-BeanPostProcessor
      • 21-Bean初始化
      • 22-ConfigurableApplicationContext
      • 23-常用注解
      • 24-ApplicationListener
      • 25-JavaDoc
      • 26-Spring-Cache
      • 27-StopWatch耗时统计
      • 28-Word
      • 29-Druid
      • 30-OpenFeign
      • 31-反射相关
      • 32-Fastjson
      • 33-Yaml
  • 🏢服务器

    • 💻Linux

      • 01-Linux常用命令
      • 02-Linux脚本汇总
      • 03-Yum源
      • 04-Debian
      • 05-Ubuntu
    • 🐋Docker

      • 01-Docker常用命令
      • 02-Dockerfile
      • 03-Swarm
      • 04-Stack
      • 05-Docker常见问题
      • 06-DockerCompose
      • 07-Docker应用用汇总
      • 08-Kasm
      • 09-Rustdesk
    • 🌐Nginx

      • 01-Nginx
  • 🏩数据相关

    • 📈数据库

      • 01-Mysql
      • 02-Clickhouse
      • 03-Doris
      • 04-DRDS
    • 📉Kettle

      • 01-入门
      • 02-js脚本
      • 03-优化
      • 04-连接组件
      • 05-参数
      • 06-工具
      • 07-日志
      • 08-流程组件
      • 09-输入组件
      • 10-输出组件
      • 11-转换组件
      • 12-驱动
  • 🏬管理工具

    • 🎨Git

      • 01-Git使用
    • 📝Maven

      • 01-Maven使用
      • 02-Maven配置
    • 🎯Jenkins

      • 01-Jenkins部署
      • 02-Jenkisn常见问题
  • 🏯书籍笔记

    • 01-设计模式之禅
    • 02-领域驱动设计
    • 03-JavaScript高级程序设计
  • 🏦其他

    • 🍓树莓派

      • 01-RaspBerry
    • 📘Markdown

      • 01-Markdown语法
      • 02-Markdown表情
      • 03-Markdown代码块语言对照
    • 📇其他

      • 01-HTML XML 转义
      • 02-GitHub
      • 03-Idea
      • 04-Nmon
      • 05-Windows
      • 06-WinSw

Kettle 参数

目录

  • 参数种类
  • 参数比较
  • 参数示例
    • 位置参数(argument)
    • 命名参数(parameter)
    • 变量(variable)

参数种类

Kettle 支持3种参数:位置参数(argument)、命名参数(parameter)、变量(variable)。

参数比较

位置参数(argument)命名参数(parameter)变量(variable)
说明根据参数的位置来设置和读取参数值,用于在kjb外部传入,并在kjb内部使用根据参数的名字来设置和读取参数值,用于在kjb外部传入,并在kjb内部使用根据参数的位置来设置和读取参数值,用于在kjb外部传入,并在kjb内部使用
注意1. 参数值只能由外部传入arg1 arg2 arg3
2. 通过位置来取值
3. 只能在转换中(transform)获取到参数值
4. 最多支持10个参数
1. 参数值只能由外部传入-param:Key=Value,Key必须固定,值可以在kjb内部重新赋值
2. 可以在作业属性中指定默认值,如果外部不传入,就取默认值
3.可在作业、转换中任意使用
4.不能动态新增
5.通过${Key}或者%%Key%%使用
1. 变量必须在KJB内部定义,在内部赋值,在内部使用(Key=Value)
2. 虽然变量只能在内部定义、赋值和使用,但是因为Key和Value都可以是变量,所以可以从外部(文件、数据库等)读取变量名、变量值,实现动态的变量声明、赋值,功能非常强大
3. 可在作业、转换任意使用
4. 可以动态声明、赋值、使用
5.通过${Key}或者%%Key%%使用
定义不需要定义双击作业(或转换)的空白处,在弹出的“命名参数”标签页,可以设置参数的名字1. 在作业中,通过“通用”->“设置变量”控件定义
2. 在转换中,通过“作业”->“设置变量”控件定义
3. 在作业中,通过“JS脚本”控件设置,如parent_job.setVariable("VAR1", "abc123")
赋值1. 在设计界面(spoon.bat)点击执行按钮时,可以在弹出的“Run Options”设置,每次运行都要重新设置
2. 在命令行界面(kitchen.bat)执行.kjb文件时,直接指定。如:sh kitchen.sh -file=/kettle/test.kjb 20150101 abc 123,这里按顺序指定了3个参数,以空格隔开
3. 父作业里面执行一个子作业时,可以在“Job”控件的位置参数标签里指定,可以使用变量
1. 在设计界面(spoon.bat)点击执行按钮时,可以在弹出的“Run Options”设置,每次运行都要重新设置
2. 在命令行kitchen.bat执行.kjb文件时,直接指定。如:sh kitchen.sh -file=/kettle/test.kjb -param:P1=20150101 -param:P2=abc -param:P3=123,这里指定了三个命名参数P1、P2、P3的参数值,顺序不限
3. 父作业里面执行一个子作业时,可以在“作业”控件的“命名参数”标签里指定,可以使用变量,可以使用数据流批量赋值并循环
1. 在作业中,通过General->Set Variables控件赋值
2. 在转换中,通过“作业”下的“设置变量”控件赋值,前面必须带有一个“输入”控件(强大的关键点就在这里,“输入”控件有多少,我们就可以有多少种方法去动态设置变量),且“输入”控件生成的记录数必须是1条(也可以是0,此时变量未能赋值)
3. 在作业中,通过“JS脚本”控件设置,如parent_job.setVariable("VAR1", "abc123")
4. 父作业里面执行一个子作业时,子作业可以自由使用父作业定义的变量,包括重新赋值,不用刻意传递
取值新建一个转换,选择“输入”下的“获取系统信息”控件,type选择“命令行参数1、2、3...”,即可读取对应位置的参数值。1. 在所有控件中,末尾带有菱形$号的输入框都可以使用,通过${KEY_NAME}或者%KEY_NAME%取值。可以嵌套使用,比如${P1}的内容是ABC${P2}123,那么${P2}的值也会被替代成真实值
2. 通过作业里面的JavaScript脚本控件读取,如:parent_job.getVariable("VAR1")
3. 在SQL中使用变量时需要把“是否替换变量”勾选上,否则无法使变量生效。
1. 在所有控件中,末尾带有菱形$号的输入框都可以使用,通过${KEY_NAME}使用。可以嵌套使用,比如${P1}的内容是ABC${P2}123,那么${P2}的值也会被替代成真实值
2. 通过作业里面的JavaScript脚本控件读取,如:parent_job.getVariable("VAR1")

参数示例

位置参数(argument)

位置参数在“获取系统信息”控件中叫做命令行参数。

可以把位置参数理解成是命令行后边以空格分割的参数(字符串)。

  • 作业

位置参数kjb

  • 转换

位置参数ktr

  • 传值方式1

位置参数方式1

  • 传值方式2

    • linux
      kitchen.sh -file=/xxxx.kjb -log=/xxx.log 1 2 
      
    • windows
      Kitchen.bat /file=d:\xxxx.kjb /log=d:\xxxx.log 1 2 
      

命名参数(parameter)

命名参数可以简单把它理解为“变量”,它可以在作业、转换中使用,也可以在同一个作业的不通转换中传递。

命名参数一个很好的优点就是支持“默认值”,这一特点应用得当可以解决很多业务上的问题。

  • 作业

命名参数作业

  • 设置作业命名参数

作业命名参数设置

  • 测试数据 测试数据

    • 创建测试表test

      CREATE TABLE if not exists `test` (
        `id` int(11) NOT NULL,
        `name` varchar(255) DEFAULT NULL,
        `sex` varchar(4) DEFAULT NULL,
        `age` int(3) DEFAULT NULL,
        PRIMARY KEY (`id`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
      
    • 创建测试表test1

      CREATE TABLE if not exists `test1` (
        `id` int(11) NOT NULL,
        `name` varchar(255) DEFAULT NULL,
        `sex` varchar(4) DEFAULT NULL,
        `age` int(3) DEFAULT NULL,
        PRIMARY KEY (`id`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
      
    • 初始化测试数据

      truncate table test1;
      truncate table test;
      replace INTO `demo`.`test` (`id`, `name`, `sex`, `age`) VALUES (1, 'mars', '男', 30);
      replace INTO `demo`.`test` (`id`, `name`, `sex`, `age`) VALUES (2, 'lucy', '女', 18);
      replace INTO `demo`.`test` (`id`, `name`, `sex`, `age`) VALUES (3, 'lily', '女', 18); 
      
  • 作业中转换的设置-将命名参数传递给转换 作业将命名参数床底给转换

    • sql中使用命名参数
      select * from test where `age` = ${ktr_age} and sex = '%%ktr_sex%%'
      

    注意:

    1. sql 中使用变量的两种方式${命名参数}或%%命名参数%%

    2. sql 中使用变量必须勾选“替换 SQL 语句里的变量”

  • 作业中配置命名参数传值给作业将命名参数传递给转换

作业中配置命名参数传值给作业将命名参数传递给转换

  • 转换-转换之间获取命名参数

转换-转换之间获取命名参数

  • 作业中转换的设置-作业转换之间获取命名参数

作业中转换的设置-作业转换之间获取命名参数

作业中转换的设置-作业转换之间获取命名参数

注意:

  1. 需要勾选 Options tab页下的“执行每一行输入”,这样才能保证获取到上一个转换结果的每一行数据
  2. 命令参数tab页,使用流列名映射上一步输出的结果字段,命名参数通过“获取参数”获取本转换设置的命名参数
  • 传值方式1

命名参数传值方式1

  • 传值方式2

    • linux
      kitchen.sh -file=/xxxx.kjb -log=/xxx.log -param:kjb_age=18 -param:kjb_sex=女
      
    • windows
      Kitchen.bat /file=d:\xxxx.kjb /log=d:\xxxx.log /param:kjb_age=18 /param:kjb_sex=女
      

变量(variable)

变量分为局部变量和全局变量,全局变量在kettle.properties中配置,多为系统级别内容,这里主要说局部变量。

局部变量一共有4个作用域:

  • Valid in the virtual machine: 在 jvm 虚拟机中有效

  • Valid in the parent job:在父作业中有效

  • Valid in the grand-parent job:在当前作业中有效

  • Valid in the root job:在根作业中有效

注意: 局部变量声明后不能在当前转换里使用,因此需要合理的配置作业中“设置变量”所处的位置,把需要引用局部变量的转换放在“设置变量”之后的转换中来实现需求。

下面是一个综合的示例,介绍如何通过“设置变量”、“获取变量”、“js 脚本”(作业和转换中 js 脚本方式不一样)控件操作变量。

  • 作业

变量

  • 作业-设置变量-测试变量

设置变量-测试变量

  • 作业-JavaScript-获取并修改变量 JavaScript-获取并修改变量
    • js 脚本内容
        // 日志
        var subject = "自定义日志输出-方式2";
        var log = new org.pentaho.di.core.logging.LogChannel(subject);
        // 变量初始值
        log.logMinimal("**********************变量tmp初始值:"+parent_job.getVariable("tmp"));
        log.logMinimal("**********************变量tmp1初始值:"+parent_job.getVariable("tmp1"));
        log.logMinimal("**********************变量tmp2初始值:"+parent_job.getVariable("tmp2"));
        log.logMinimal("**********************变量tmp3初始值:"+parent_job.getVariable("tmp3"));
        // 变量赋值
          
        // 变量初始值
        parent_job.setVariable("tmp","2");
        parent_job.setVariable("tmp1",3);
        parent_job.setVariable("tmp2","2024-02-02");
        parent_job.setVariable("tmp3","efg");
          
        log.logMinimal("**********************变量tmp在js中赋值后:"+parent_job.getVariable("tmp"));
        log.logMinimal("**********************变量tmp1在js中赋值后:"+parent_job.getVariable("tmp1"));
        log.logMinimal("**********************变量tmp2在js中赋值后:"+parent_job.getVariable("tmp2"));
        log.logMinimal("**********************变量tmp3在js中赋值后:"+parent_job.getVariable("tmp3"));
          
        true;
      

注意: js脚本在作业中获取变量使用parent_job.getVariable("tmp"),赋值变量使用parent_job.setVariable("tmp","2") 与转换中不一致

  • 转换-转换设置变量

转换-转换设置变量

  • 转换-转换获取变量

    转换-转换获取变量

    • js 脚本内容
        //Script here
        Alert("转换获取ktr_tmp1变量值为:"+ktr_tmp1) ;
      
        Alert("kjb中tmp变量值:"+getVariable("tmp","default")) ;
        
        Alert("转换设置中ktr_a变量值为:"+getVariable("ktr_a","default")) ;
        
        setVariable("ktr_a","123","r");
        
        Alert("js中ktr_a变量值为:"+getVariable("ktr_a","default")) ;
      

注意: js脚本在转换中获取变量使用getVariable("ktr_a","default")),赋值变量使用setVariable("ktr_a","123","r") 与作业中不一致

Edit this page
Last Updated:
Contributors: wangxiaoquan
Prev
04-连接组件
Next
06-工具