天天看點

kettle循環解決連接配接oracle資料庫報錯Connection reset第二種循環源檔案下載下傳:connection_reset.rar1.kettle8官方案例2.通過job step裡的JavaSrcipt 元件建構循環

第二種循環源檔案下載下傳:connection_reset.rar

介紹兩種循環方式,一種是官方自帶例子,通過job元件執行每一行來循環,第二種通過javaScript腳本元件循環,同時可以解決接oracle資料庫報錯Connection reset的問題

1.kettle8官方案例

檔案位置:$KETTLE_HOME/samples/jobs/process all tables

這個例子是先擷取資料庫中的所有表名,統計表格表的資料條數,最後輸出到txt上

包含檔案和作用:

kettle循環解決連接配接oracle資料庫報錯Connection reset第二種循環源檔案下載下傳:connection_reset.rar1.kettle8官方案例2.通過job step裡的JavaSrcipt 元件建構循環

流程控制總job

kettle循環解決連接配接oracle資料庫報錯Connection reset第二種循環源檔案下載下傳:connection_reset.rar1.kettle8官方案例2.通過job step裡的JavaSrcipt 元件建構循環

transformation(轉換):Get list of tables as result

kettle循環解決連接配接oracle資料庫報錯Connection reset第二種循環源檔案下載下傳:connection_reset.rar1.kettle8官方案例2.通過job step裡的JavaSrcipt 元件建構循環

元件1:get list of tables

kettle循環解決連接配接oracle資料庫報錯Connection reset第二種循環源檔案下載下傳:connection_reset.rar1.kettle8官方案例2.通過job step裡的JavaSrcipt 元件建構循環

自帶資料庫連接配接

kettle循環解決連接配接oracle資料庫報錯Connection reset第二種循環源檔案下載下傳:connection_reset.rar1.kettle8官方案例2.通過job step裡的JavaSrcipt 元件建構循環

元件2:Concat Fields

把TABLE_SCHEMA字段和TABLE_NAME拼接成一個字段TABLE_SCHEMA_NAME,分隔符為英文句号

元件3:tables.txt

查詢出來的表名稱TABLE_NAME輸出到txt

輸出的檔案路徑,可以把滑鼠移動到上面就會顯示

kettle循環解決連接配接oracle資料庫報錯Connection reset第二種循環源檔案下載下傳:connection_reset.rar1.kettle8官方案例2.通過job step裡的JavaSrcipt 元件建構循環

元件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上需要勾選執行每一條資料,這點就是循環的關鍵

kettle循環解決連接配接oracle資料庫報錯Connection reset第二種循環源檔案下載下傳:connection_reset.rar1.kettle8官方案例2.通過job step裡的JavaSrcipt 元件建構循環
kettle循環解決連接配接oracle資料庫報錯Connection reset第二種循環源檔案下載下傳:connection_reset.rar1.kettle8官方案例2.通過job step裡的JavaSrcipt 元件建構循環

transformation(轉換):Define TABLE variable

kettle循環解決連接配接oracle資料庫報錯Connection reset第二種循環源檔案下載下傳:connection_reset.rar1.kettle8官方案例2.通過job step裡的JavaSrcipt 元件建構循環

元件1:get one tablename

kettle循環解決連接配接oracle資料庫報錯Connection reset第二種循環源檔案下載下傳:connection_reset.rar1.kettle8官方案例2.通過job step裡的JavaSrcipt 元件建構循環

元件2:set ${TABLENAME}

kettle循環解決連接配接oracle資料庫報錯Connection reset第二種循環源檔案下載下傳:connection_reset.rar1.kettle8官方案例2.通過job step裡的JavaSrcipt 元件建構循環

transformation(轉換):Get amount of rows from table

kettle循環解決連接配接oracle資料庫報錯Connection reset第二種循環源檔案下載下傳:connection_reset.rar1.kettle8官方案例2.通過job step裡的JavaSrcipt 元件建構循環

元件1:Number of rows in ${TABLENAME}

kettle循環解決連接配接oracle資料庫報錯Connection reset第二種循環源檔案下載下傳:connection_reset.rar1.kettle8官方案例2.通過job step裡的JavaSrcipt 元件建構循環

元件2:rows-${TABLENAME}.txt

查詢到一個結果輸出到一個txt上,檔案名為${java.io.tmpdir}/rows-${TABLENAME}

輸出結果為:

kettle循環解決連接配接oracle資料庫報錯Connection reset第二種循環源檔案下載下傳:connection_reset.rar1.kettle8官方案例2.通過job step裡的JavaSrcipt 元件建構循環

transformation(轉換):save list of all result files

把輸出的txt合并成一個,該例子有點問題需要修改一下才行,做循環的話這部分可以忽略

2.通過job step裡的JavaSrcipt 元件建構循環

這個例子是自己寫的,主要功能是連接配接oracle資料庫時發生 'Connection reset by peer' or 'Connection reset'  的錯誤

作業如下:

kettle循環解決連接配接oracle資料庫報錯Connection reset第二種循環源檔案下載下傳:connection_reset.rar1.kettle8官方案例2.通過job step裡的JavaSrcipt 元件建構循環

其中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腳本說明

繼續閱讀