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"); |