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.全量抽取同上一個方法
以上兩種方法個人測試感覺第一種快些,希望大家將測試結果寫到評論方便大家使用.
上述兩種方法下載地址:點選開啟連結