場景:User_Tables存放着系統用戶的表信息,其中列Table_Name存放着表名。現在想從User_Tables中獲取要進行相同數據抽取操作的表,使用Kettle實現循環執行這些表。例如統計表A、B的總行數:
SELECT COUNT(1) FROM A; SELECT COUNT(1) FROM B;這些SQL語句除開表名外,其他部分都是一樣的,所以在使用KETTLE抽取數據時,Kettle循環抽取這些表的數據。
環境:Kettle4.4
思路:
1、上面的SQL中除了表名不一致外,其他都是一樣的。所以首先解決Kettle 表輸入中表名替換問題。Kettle提供了設置變量的步驟,可以將查詢出的表名作為變量,在Kettle內進行傳遞賦值。如下圖所示:

2、由於Kettle變量一次只能接收一個值,因此若是要執行查詢操作的表為兩個或者兩個以上,就無法直接使用變量來替換${TABLEnAME}。需要一個能夠存儲多個表名的步驟或腳本實現遍歷查詢出的表名,並將查詢出來的一個表名設置成變量。

圖1 圖2
圖1:將要執行表名從數據庫表中取出來,並復制到trans腳本運行結果中。
圖2:【獲取表的數量】執行的是圖1的Trans腳本,【執行表數量判斷和設置變量】步驟獲取【獲取表的數量】步驟運行的結果,並設置控制循環和表名變量。如下圖:

3、循環控制實現,其中步驟【循環控制器】相當於for(int i=0;i<size;i++)循環中i<size;【獲取表行數】相當於for循環內部的處理操作;【計數器累加】相當於i++。如下圖:

上圖中【計數器累加】也實現變量TABLENAME復制操作。


4、整個實現的腳步如下:



