Kettle批量操作流程使用(二)---多個數據源單表批量操作
上一篇部落格介紹了本次操作的一些需求和預研思路,並且對第一種方式做了測試,現在將對第二種方式做測試。雖然在網上有不少關於動態連結庫的文章,但是不少是操作kettle檔案,或者通過指令碼去按照一定規則生成變數。好像並不是很適合我自己的任務思路,因此在借鑑他們的思路的基礎上,通過多次測試,終於走通了動態連結資料來源的資料抽取,為了方便一步一步的遞進,本次選擇了一個數據較少的表來測試,具體步驟詳見下文。
(1)單個數據源多表批量操作:每次只連線一個數據源,把表名作為變數,維護一個任務抽取一個使用者節點的所有資料
(2)多個數據源單標批量操作:動態連結多個數據源,每個資料來源只對一個表做資料抽取
(3)多個數據源多表批量操作:動態連結多個數據源,每個資料來源所有表做資料抽取
1.1 持久化資料來源資訊
因為我們要做批量資料來源的資料遷徙,因此可以將多個數據庫的資料來源連結資訊先儲存在表裡,或者儲存在其他形式的檔案裡,方便我們去到資料。為了後續擴充套件方便,管理方便,我將資料來源連結資訊放在表裡。同時為了能一條一條的取出資料來源,我定義了一個標誌欄位id,可以通過這個id來獲取一條條的記錄。持久化資訊如下:
CREATE TABLE "public"."t_cce_jdbc" ( "id" varchar(100) COLLATE "default", "jdbc_name" varchar(255) COLLATE "default", "jdbc_host" varchar(255) COLLATE "default", "jdbc_username" varchar(255) COLLATE "default", "jdbc_pasword" varchar(255) COLLATE "default", "jdbc_database" varchar(255) COLLATE "default", "jdbc_port" varchar(10) COLLATE "default") WITH (OIDS=FALSE)
1.2 設定資料庫連結id為變數
1) 新建一個transfer,命名為getIds,包含三個步驟如圖所示:
2) 設定表輸入的資料庫源設定
3) 設定表輸入的獲取資料指令碼,這裡就是從持久化的資料中獲取到資料,為了後續的每次執行一條資料庫指令碼,這裡就先把id獲取出來,左後後續獲取資料庫連結的一個引數。
4) 將設定選擇欄位,因為這裡只有一個id欄位,因此只要列一個欄位即可,暫時將其設定為id_param
5) 將三個步驟聯結起來,完成單錢transfer的操作,如下圖
1.3 獲取資料庫連結id資訊
1) 新建transfer,命名為setIdparam,包含如下兩個步驟
2) 設定從結果獲取的記錄,將上一個儲存到結果的資料拿出來
3) 將獲取的記錄結果儲存到變數中,並將變數名統一改為大寫ID_PARAM
4) 將兩個步驟聯結起來,並儲存
1.4 設定資料庫連結資訊為結果
1) 新建transfer,命名為getJDBC,包含三個步驟,如下圖:
2) 設定資料庫連結,這裡的連結跟獲取id的連結是一樣的,如下圖:
3) 設定資料庫指令碼,根據上一步的ID引數獲取每一次要獲取的資料庫連結,注意要勾選上允許替換SQL中的變數
4) 設定選擇欄位,根據上一個指令碼查出來的欄位,選擇將要設定為變數的欄位,並加上一個引數標識。
5) 設定變數將選取的欄位設定為變數
6) 將三個步驟聯結起來並儲存
1.5 抽取資料庫資料
1) 新建transfer命名為getDatas,包含兩個步驟,如下圖所示:
2) 設定表輸入的資料庫連結,因為這裡的資料庫連結是從上一個的變數找那個獲取,因此這裡的連結資訊基本上都是用變數代替,如下圖所示:
3) 設定資料庫抽取指令碼,這裡只用一個表做抽取,如下圖所示:
4) 設定表輸出的目標連結資訊,如下圖所示:
5) 設定目標表,根據上一步設定的表輸入的指令碼中表名,選擇目標表
6) 將兩個步驟連結,儲存。
1.6 建立資料庫抽取子Job
1) 新建Job,命名為jobData,包含如下三個步驟:
2) 設定第一個轉換,從檔案中選擇之前步驟設定的setIdParam繫結,如下圖:
3) 設定第二個轉換,從檔案中獲取之前的步驟setJDBC繫結,如下圖:
4) 設定第三個轉換,從檔案中獲取之前設定的getDatas繫結,如下圖
5) 連線三個步驟,並儲存,如下圖
1.7 建立資料庫抽取整個Job
1) 新建一個job,命名為jobAll,包含如下三個步驟
2) 設定第一個轉換,從檔案中選擇前面設定的getIds繫結,如下圖所示:
3) 設定子job,選擇之前步驟設定的jobDatas繫結,並在高階中勾選每個輸入執行一次,如下圖所示:
4) 連結job中的所有步驟,並儲存。
1.8 執行任務並檢視結果
資料來源1資料:22條
資料來源2資料:54條
執行後目標庫資料:76條
通過實驗可以發現兩個資料來源的資料都已入庫。
本次部落格的資料抽取 指令碼下載地址