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。
命名參數可以在轉換或作業的設置對話框中定義,定義時給定默認值;當在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(){
articleBox.removeAttr("style");
$(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_設置變量的兩種方法
一個復雜的kettle作業一般包括很多子作業和轉換,在主作業Start后通常會添加一個【設置變量】的流程,該流程的功能是為所有流程的公共變量設置通用值。
主作業添加的【設置變量】針對的是所有流程,如果需要運行某個在作業,就需要將其引用的變量值改為常量才能運行,想當年麻煩,本文介紹兩種方法規避該問題
方法一:在子作業中添加設置變量流程
下圖中table changlog exists?流程使用變量${cl},但是設置${cl}變量的值在主作業執行,所以執行本作業時會報錯
解決方法:在table changlog exists?流程前添加【設置變量】流程用於設置${cl}的值
方法二:設置全局變量
C:\Users\Administrator\.kettle\kettle.properties
打開本文件,設置鍵值對如cla=CHANGELOG1,重啟spoon.bat后,start中的變量會自動引用鍵值對的值
只有本作業中使用了變量,start的變量一欄才會顯示