1. 程式人生 > >ETL利器Kettle實戰應用解析系列二 【應用場景和實戰DEMO下載】

ETL利器Kettle實戰應用解析系列二 【應用場景和實戰DEMO下載】

本文主要閱讀目錄如下:

1、應用場景

這裡簡單概括一下幾種具體的應用場景,按網路環境劃分主要包括:

  • 表檢視模式:這種情況我們經常遇到,就是在同一網路環境下,我們對各種資料來源的表資料進行抽取、過濾、清洗等,例如歷史資料同步、異構系統資料互動、資料對稱釋出或備份等都歸屬於這個模式;傳統的實現方式一般都要進行研發(一小部分例如兩個相同表結構的表之間的資料同步,如果sqlserver資料庫可以通過釋出/訂閱實現),涉及到一些複雜的一些業務邏輯如果我們研發出來還容易出各種bug;

  • 前置機模式:這是一種典型的資料交換應用場景,資料交換的雙方A和B網路不通,但是A和B都可以和前置機C連線,一般的情況是雙方約定好前置機的資料結構,這個結構跟A和B的資料結構基本上是不一致的,這樣我們就需要把應用上的資料按照資料標準推送到前置機上,這個研發工作量還是比較大的;

  • 檔案模式: 資料互動的雙方A和B是完全的物理隔離,這樣就只能通過以檔案的方式來進行資料互動了,例如XML格式,在應用A中我們開發一個介面用來生成標準格式的XML,然後用優盤或者別的介質在某一時間把XML資料拷貝之後,然後接入到應用B上,應用B上在按照標準介面解析相應的檔案把資料接收過來;

綜上3種模式如果我們都用傳統的模式無疑工作量是巨大的,那麼怎麼做才能更高效更節省時間又不容易出錯呢?答案是我們可以用一下Kettle-_-!

2、DEMO實戰

2、1 例項1:資料庫TestA中的UserA表到資料庫TestB的UserB表

1)為方便演示,我這邊把Sql指令碼貼出來,大家直接複製在sqlserver中執行即可,sql指令碼如下:

簡單表之間交換

2)Kettle實現方式

功能簡述:資料庫TestA中的UserA表到資料庫TestB的UserB表;

實現流程:建立一個轉換和一個作業Job;

A:建立一個轉換:開啟Kettle.exe,選擇沒有資源庫,進入主介面,新建一個轉換,轉換的字尾名為ktr,轉換建立的步驟如下:

步驟1:建立DB連線,選擇新建DB連線,如下圖,我們輸入相應的Sqlserver配置資訊之後點選Test按鈕測試是否配置正確!

我們需要建立兩個DB連線,分別為TestA和TestB;

步驟2:建立步驟和步驟關係,點選核心物件,我們從步驟樹中選擇【表輸入】,如下圖,這樣拖拽一個表輸入之後,我們雙擊表輸入之後,我們自己可以隨意寫一個sql語句,這個語句表示可以在這個庫中隨意組合,只要sql語句沒有錯誤即可,我這裡只是最簡單的把TestA中的所有資料查出來,語句為select * from usersA。

接下來我們建立另外一個步驟【插入/ 更新】,然後在【表輸入】上同時按住shift鍵和滑鼠左鍵滑向【插入/ 更新】,這樣建立兩個步驟之間的連線,【插入/ 更新】執行的邏輯是如果UserA表中的記錄在UserB中不存在那麼就插入,如果存在就更新,如下圖,在插入更新中我們可以做一些關鍵條件和欄位對映,這裡我們是最簡單的!點選儲存,把我們建立的轉換儲存一下。

建立好轉換之後,我們可以直接執行這個轉換,檢查一下是否有錯,如圖,有錯誤都會在下面的控制檯上輸出。

B:如果我們需要讓這個轉換定時執行怎麼辦呢,那麼我們需要建立一個作業job,見下圖,在簡單表同步這個轉換中,我們把在A步驟中建立的ktl配置上,注意路徑的正確性;

這樣我們在【Start】步驟上面雙擊,如圖:

這樣這個作業就制定好了,點選儲存之後,我們就可以在圖形化介面上點選開始執行了!

2、2 例項2:全面進階的一個稍微複雜的例子

ž根據客戶,帳戶,交易表中的資料,生成對應的資料檔案,將資料檔案可以匯入到對應表中,並且可以用job來呼叫整個流程。 ž目標: ž1),提交對應的Kettle檔案 ž2),Kettle流程可以正確執行,不報錯 ž3),對應的資料檔案生成並格式無誤,對應表中有資料並格式無誤 ž說明: ž源表:資料庫etltest中存在3張表: 目標表:etltest中一張表 Kettle具體解決方式,步驟比較繁瑣,大家可以直接到下載中下載Demo資料庫檔案和ktr、kjb來實戰測試,這樣是最好的,下面的操作僅供參考,轉換預覽圖如下:

操作步驟:
在EtltestTrans頁面下,點選左側的【Core Objects】,點選【Input】,選中【表
輸入】,拖動到主視窗釋放滑鼠。
雙擊【表輸入】圖示
資料庫連線選擇剛剛建立好的etltest資料庫連線,在主視窗寫入對應的查詢
語句
Select * from trade ,如下圖:

點選確定完成。
點選左側的【Lookup】,選中【資料庫查詢】,拖動到主視窗釋放滑鼠。
按住shift鍵,用滑鼠點中剛才建立的【表輸入】,拖動到【資料庫查詢】上,
則建立了兩個環節之間的連線,如圖:

雙擊【資料庫查詢】

步驟名稱寫入account 表查詢,資料庫連線選擇剛剛建立好的etltest 資料庫
連線,查詢的表寫入account,查詢所需的關鍵字中,表字段寫入acctno,比較
操作符寫入“=”,欄位1寫入acctno。
在查詢表返回的值裡面寫入custno,確定完成,如下圖:


同上,再建立一個數據庫查詢,命名為cust表查詢,查詢的表寫入cust,查
詢所需的關鍵字寫入custno=custno,查詢表返回的值寫入custname,custid,
custtype,如下圖:


點選左側的【Transform】,選中【過濾記錄】,拖動到主視窗釋放滑鼠。
點選左側的【Scripting】,選中兩個【Modified Java Script Value】,拖動到主窗
口釋放滑鼠。分別雙擊開啟,重新命名為“對公型別修改”和“對私型別修改”。
同時,分別建立【過濾記錄】和【對公型別修改】,【對私型別修改】的連線。
雙擊【規律記錄】開啟。
第一個<field>裡面選擇custtype,點選<value>,在Enter value 裡面寫入1,
確定,如圖:


在傳送true資料給步驟裡,選擇【對私型別修改】,在傳送false資料給步驟
裡,選擇【對公型別修改】,確定儲存,如圖:


雙擊【對公型別修改】,在裡面寫入javascript 指令碼語句
var custtype_cn='對公客戶交易'
在欄位中寫入custtype_cn,型別選為string。確定。
同理,在【對私型別修改】中,在裡面寫入javascript指令碼語句
var custtype_cn='對私客戶交易'
在欄位中寫入custtype_cn,型別選為string。確定。
點選左側的【Transform】,選中兩個【增加常量】,拖動到主視窗釋放滑鼠。
分別雙擊開啟,重新命名為“增加對公常量”和“增加對私常量”。
分別建立【對公型別修改】和【對私型別修改】與【增加對公常量】和【增
加對私常量】的連線,如圖:


雙擊【增加對公常量】,名稱寫入value,型別選擇string,值寫入“這是一
筆對公客戶發生的交易”,確定儲存。
同理,雙擊【增加對私常量】,名稱寫入value,型別選擇string,值寫入“這
是一筆對私客戶發生的交易”,確定儲存。
點選左側的【Output】,選中【文字檔案輸出】,拖動到主視窗釋放滑鼠。
建立【增加對公常量】,【增加對私常量】和【文字檔案輸出】的連線,如圖:


雙擊開啟【文字檔案輸出】,檔名稱寫入D:\etltest\etltest.txt
點選內容標籤,根據情況進行修改,例如
點選欄位標籤
名稱依次寫入tradeid,acctno,amt,custno,custname,custid,custtype_cn,
value,型別根據各個欄位實際型別進行選擇
確定儲存
點選儲存建立好的transformation。
點選執行這個轉換。
點選launch,開始執行
當所有狀態都變已完成時,則轉換完成,如圖:

3、Demo下載