1. 程式人生 > >Kettle批量操作流程使用(二)---多個數據源單表批量操作

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條

通過實驗可以發現兩個資料來源的資料都已入庫。

本次部落格的資料抽取 指令碼下載地址