天天看點

KETTLE實作循環批量多表抽取添加字段

轉自:https://blog.csdn.net/qq_41704358/article/details/79519133

免費開源的、可視化的、國際上最流行的、功能強大的ETL必備工具: http://www.kettle.net.cn/

場景:将kettle資源庫抽取到另一個資料庫中并輸出抽取表單,(本文用的是MySQL).不廢話直接發

方法一

1.總架構

建立作業

2.擷取表的數量

這步用到表輸入和複制記錄到結果字元串元件,其他可以擷取表的元件也可以自由發揮

3.執行表數量判斷并設定變量,用到JavaScript元件

JAVA代碼如下:

var prevRow=previous_result.getRows();

if (prevRow == null && (prevRow.size()=0))

{

false;

}

else

{

        parent_job.setVariable("table_name", prevRow);//ArrayList存儲表名變量

parent_job.setVariable("size", prevRow.size());//存儲執行表的總數量

parent_job.setVariable("i", 0);//循環控制變量

parent_job.setVariable("TABLENAME", prevRow.get(0).getString("TABLE_NAME",""));

true;

}

4.設定變量

這步是設定抽取時間戳的時間變量,本步放在全量抽取裡面也可以每次循環都會調用會影響整體速度.

5.循環控制

這步在作業裡用到檢驗字段的值、轉換和JavaScript元件

JavaScript元件,JAVA代碼如下:

var list_Tables = parent_job.getVariable("table_name").replace("[","").replace(" ","").replace("]","").split(",");

var size = new Number(parent_job.getVariable("size"));

var i = new Number(parent_job.getVariable("i"))+1;

if(i < size)

{

parent_job.setVariable("TABLENAME", list_Tables[i]);

}

parent_job.setVariable("i",i);

true;

轉換設定如下:

元件名稱如上顯示

6.PRINT_TABLES,這個步驟可以省略,本人目的是看看裡面都有那些表.

方法二

1.總架構

建立作業

2.設定變量、擷取表的數量和PRINT_TABLES同上

3.關鍵差别——全量抽取作業元件

勾選執行每一個輸入行?

a.設定表變量

用到從以前的結果擷取記錄和設定變量元件

b.全量抽取同上一個方法

以上兩種方法個人測試感覺第一種快些,希望大家将測試結果寫到評論友善大家使用.

上述兩種方法下載下傳位址:點選打開連結

--------------------- 

作者:帝輕 

來源:CSDN 

原文:https://blog.csdn.net/qq_41704358/article/details/79519133 

版權聲明:本文為部落客原創文章,轉載請附上博文連結!

繼續閱讀