第二種循環源檔案下載下傳:connection_reset.rar
介紹兩種循環方式,一種是官方自帶例子,通過job元件執行每一行來循環,第二種通過javaScript腳本元件循環,同時可以解決接oracle資料庫報錯Connection reset的問題
1.kettle8官方案例
檔案位置:$KETTLE_HOME/samples/jobs/process all tables
這個例子是先擷取資料庫中的所有表名,統計表格表的資料條數,最後輸出到txt上
包含檔案和作用:
流程控制總job
transformation(轉換):Get list of tables as result
元件1:get list of tables
自帶資料庫連接配接
元件2:Concat Fields
把TABLE_SCHEMA字段和TABLE_NAME拼接成一個字段TABLE_SCHEMA_NAME,分隔符為英文句号
元件3:tables.txt
查詢出來的表名稱TABLE_NAME輸出到txt
輸出的檔案路徑,可以把滑鼠移動到上面就會顯示
元件4:Select values
隻選擇一個字段TABLE_SCHEMA_NAME并且重命名成tablename
元件5:Copy rows to result
把表名稱複制到結果集上,在下一個transformaton裡面可以使用Get rows from result擷取到結果集
Job(作業):Process a table
前面一個transformation擷取到5條資料,資料到Process a table 這個job上需要勾選執行每一條資料,這點就是循環的關鍵
transformation(轉換):Define TABLE variable
元件1:get one tablename
元件2:set ${TABLENAME}
transformation(轉換):Get amount of rows from table
元件1:Number of rows in ${TABLENAME}
元件2:rows-${TABLENAME}.txt
查詢到一個結果輸出到一個txt上,檔案名為${java.io.tmpdir}/rows-${TABLENAME}
輸出結果為:
transformation(轉換):save list of all result files
把輸出的txt合并成一個,該例子有點問題需要修改一下才行,做循環的話這部分可以忽略
2.通過job step裡的JavaSrcipt 元件建構循環
這個例子是自己寫的,主要功能是連接配接oracle資料庫時發生 'Connection reset by peer' or 'Connection reset' 的錯誤
作業如下:
其中js代碼
var count;
var count_max;
//擷取目前循環次數
count = parent_job.getVariable("EP_V_ID");
//擷取允許的最大循環次數
count_max = parent_job.getVariable("EP_V_MAX_ID");
//目前次數等于最大循環次數
if(count == count_max){
//傳回false給js腳本元件,js腳本元件往紅色線執行
false;
}else{
//目前循環次數加1
count = parseInt(count) + 1;
//替換jvm中的循環次數
parent_job.setVariable("EP_V_ID", count);
//傳回true給js腳本元件,js腳本元件往綠色線執行
true;
}
相當于如下循環:
for(int i=0;i++){
if(資料庫連接配接成功) break;
if(i==5) break;
print("資料庫連接配接資訊")
這種方式也可以循環便利數組,js中數組的使用方法具體的可以參考官網上的js腳本說明