kettle之参数和变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kettle之参数和变量相关的知识,希望对你有一定的参考价值。

参考技术A 最近用到了kettle中的变量,说一下我碰到的一些问题
1、变量(variable)
这个是整个流程图

获取之前的查询结果,输出到文本文档,文档内容如下:

现在要查询CODE='02',点击启动,填写值为02,如果不填值,会用默认值做查询

Kettle位置参数(Argument)命名参数(Parameter)变量(Variable)

Kettle支持3种参数:位置参数、命名参数、变量。

  位置参数(argument) 命名参数(parameter) 变量(variable)
说明 根据参数的位置来设置和读取参数值,用于在KJB外部传入,并在KJB内部使用 根据参数的名字来设置和读取参数值,用于在KJB外部传入,并在KJB内部使用 由用户自定义,在KJB内部随时随地的定义、赋值和使用
关键点

1、参数值只能由外部传入(arg1 arg2 arg3)

2、通过位置来取值;

3、只能在转换中(transform)获取到参数值;

4、最多支持10个参数

5、功能:太弱(不建议使用)

1、参数值只能由外部传入(-param:Key=Value),Key必须固定,值可以在KJB内部重新赋值;
2、可以在作业属性中指定默认值,如果外部不传入,就取默认值;
3、可在作业、转换中任意使用;
4、不能动态新增;
5、通过${Key}使用;
6、强大程度:一般
1、变量必须在KJB内部定义,在内部赋值,在内部使用(Key=Value);
2、虽然变量只能在内部定义、赋值和使用,但是因为Key和Value都可以是变量,所以可以从外部(文件、数据库等)读取变量名、变量值,实现动态的变量声明、赋值,功能非常强大;
3、可在作业、转换任意使用;
4、可以动态声明、赋值、使用;
5、通过${Key}使用;
6、最灵活强大,推荐使用
如何定义?

一边定义,一边赋值。

见下面的“如何赋值”
双击作业(或转换)的空白处,在弹出的“parameters”标签页,可以设置参数的名字

1、在作业中,通过General->Set Variables控件定义;

2、在转换中,通过Job->Set Variables控件定义;

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”控件的Arguments标签里指定,可以使用变量
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、父作业里面执行一个子作业时,可以在“Job”控件的Parameters标签里指定,可以使用变量,可以使用数据流批量赋值并循环
1、在作业中,通过General->Set Variables控件赋值;
2、在转换中,通过Job->Set Variables控件赋值,前面必须带有一个Input控件(强大的关键点在这里,Input控件有多少,我们就可以有多少种方法去动态设置变量),且Input控件生成的记录数必须是1条(也可以是0,此时变量未能赋值);
3、在作业中,通过“JS脚本”控件设置,如parent_job.setVariable("VAR1", "abc123");
4、父作业里面执行一个子作业时,子作业可以自由使用父作业定义的变量,包括重新赋值,不用刻意传递
如何读取? 新建一个转换,选择“Input”下的“get System Info”控件,type选择“command line argument1、2、3...”,即可读取对应位置的参数值。 1、在所有控件中,末尾带有菱形$号的输入框都可以使用,通过${KEY_NAME}使用。可以嵌套使用,比如${P1}的内容是ABC${P2}123,那么${P2}的值也会被替代成真实值
2、通过作业里面的JavaScript脚本控件读取,如:parent_job.getVariable("VAR1");
1、在所有控件中,末尾带有菱形$号的输入框都可以使用,通过${KEY_NAME}使用。可以嵌套使用,比如${P1}的内容是ABC${P2}123,那么${P2}的值也会被替代成真实值;
2、通过作业里面的JavaScript脚本控件读取,如:parent_job.getVariable("VAR1");

以上是关于kettle之参数和变量的主要内容,如果未能解决你的问题,请参考以下文章

KETTLE设置变量

如何给一个 Kettle 转换设置变量和命令行参数

Kettle位置参数(Argument)命名参数(Parameter)变量(Variable)

Kettle位置参数(Argument)命名参数(Parameter)变量(Variable)

kettle 怎样从转换中过的job中定义的变量

Kettle8.2下设置自定义SQL中多时间变量参数