1. 程式人生 > >KETTLE實現迴圈批量多表抽取新增欄位

KETTLE實現迴圈批量多表抽取新增欄位

場景:將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.全量抽取同上一個方法

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

上述兩種方法下載地址:點選開啟連結