kettle参数、变量详细讲解
kettle 3.2 以前的版本⾥只有 variable 和 argument,kettle 3.2 中,⼜引⼊了 parameter 概念;variable 即environment variables(环境变量或全局变量),即使是不同的转换它们也拥有同样的值;⽽argument(位置参数)和parameter(命名参数),可以映射为局部变量,只针对⼀个特定的转换,⽐如像是限定结果集的⼤⼩和过滤条件。
1、 variable(变量)
variables 也可以认为叫做environment variables , 就像它的名字⼀样,主要是⽤来设定环境变量的,⽐如最常见的:⽂件的存放地址,smtp 的配置等等,你也可以把它认为是编程语⾔⾥⾯的全局变量,即使是不同的转换它们也拥有同样的值;
变量可以⽤在转换或作业中,可以通过在转换中使⽤ Set Variable 步骤定义或在kettle.properties⽂件中定义,⽂件的路径默认如下:
$HOME/.kettle (Unix/Linux/OSX)
C:\Documents andSettings\<username>\.kettle\ (Windows)
C:\Users\<username>\.kettle\(Windows Vista)
1.1、kettle.properties⽂件中定义全局变量
打开⽂件,直接在⾥⾯定义,如: TODAY=to_char(sysdate,'yyyy-mm-dd'),这⾥⽀持数据库函数,说的更直⽩点,就是这⾥定义是个啥,那么在transformation⾥边取到的它就是啥。在需要的地⽅,直接%%V_YES_DATE%%,或者${V_YES_DATE}就可以得到。需要提醒的是如果编辑中⽂,需要navationtoascii⼯具或在eclipse中编辑。定义后保存重启spoon才⽣效。
2、 arument(位置参数)
kettle 3.2 以前的版本⾥只有 argument,也叫Positional arguments,就是最多能设置的 10 个命令⾏参数,通过在命令⾏参数的位置来区别
3、 parameter(命名参数)
在 kettle 3.2 中,⼜引⼊了 parameter 概念,可以通过名称来区别,并可以在命令⾏中通过/param:name=value 的⽅式设置设置参数,另
外/listparam 可以列出⼀个ktr 或 kjb ⾥定义的parameter。
param name命名参数可以在转换或作业的设置对话框中定义,定义时给定默认值;当在SPOON中运⾏作业或转换
时,在运⾏对话框中输⼊命名参数的值。在命令⾏中运⾏时,也可以通过-param:name=value给每个命名参数赋值,param:name=value在命令⾏中⼀个整体块,视为命令的⼀个参数。
例:运⾏job.kjb⽂件,有两个参数files.dir=/opt/files 、max.date=2010-06-02
Linux: ./kitchen.sh-file:job.kjb -param:files.dir=/opt/files -param:max.date=2010-06-02
Windows: Kitchen.bat -file:job.kjb “-param:files.dir=/opt/files”“-param:max.date=2010-06-02″
命名参数可作为变量,在运⾏时命名参数并映射为变量。如果你定义了命名参数为foo,你可以在任何地⽅引⽤通过${foo}.
命名参数使⽤需要在转换、job中设置命名参数
windows下参数必须加双引号
执⾏命令:
Linux: ./kitchen.sh-file:job.kjb -param:files.dir=/opt/files -param:max.date=2010-06-02
Windows: Kitchen.bat -file:job.kjb “-param:files.dir=/opt/files”“-param:max.date=2010-06-02″
例⼦图⽚见附件
<script>
(function(){
function setArticleH(btnReadmore,posi){
var winH = $(window).height();
var articleBox = $("div.article_content");
var artH = articleBox.height();
if(artH > winH*posi){
articleBox.css({
'height':winH*posi+'px',
'overflow':'hidden'
})
btnReadmore.click(function(){
$(this).parent().remove();
})
}else{
btnReadmore.parent().remove();
}
}
var btnReadmore = $("#btn-readmore");
if(btnReadmore.length>0){
if(currentUserName){
setArticleH(btnReadmore,3);
}else{
setArticleH(btnReadmore,1.2);
}
}
})()
</script>
</article>
⼀个复杂的kettle作业⼀般包括很多⼦作业和转换,在主作业Start后通常会添加⼀个【设置变量】的流程,该流程的功能是为所有流程的公共变量设置通⽤值。
主作业添加的【设置变量】针对的是所有流程,如果需要运⾏某个在作业,就需要将其引⽤的变量值改为常量才能运⾏,想当年⿇烦,本⽂介绍两种⽅法规避该问题
⽅法⼀:在⼦作业中添加设置变量流程
下图中table changlog exists?流程使⽤变量${cl},但是设置${cl}变量的值在主作业执⾏,所以执⾏本作业时会报错
解决⽅法:在table changlog exists?流程前添加【设置变量】流程⽤于设置${cl}的值
⽅法⼆:设置全局变量
C:\Users\Administrator\.kettle\kettle.properties
打开本⽂件,设置键值对如cla=CHANGELOG1,重启spoon.bat后,start中的变量会⾃动引⽤键值对的值
只有本作业中使⽤了变量,start的变量⼀栏才会显⽰
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论