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

本系列文章主要索引以下:javascript

1、ETL利器Kettle實戰應用解析系列一【Kettle使用介紹】html

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

3、ETL利器Kettle實戰應用解析系列三 【ETL後臺進程執行配置方式】sql

本文主要閱讀目錄以下:數據庫

一、應用場景網絡

二、DEMO實戰數據結構

三、DEMO下載sqlserver

 

一、應用場景測試

這裏簡單歸納一下幾種具體的應用場景,按網絡環境劃分主要包括:spa

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

  • 前置機模式:這是一種典型的數據交換應用場景,數據交換的雙方A和B網絡不通,可是A和B均可以和前置機C鏈接,通常的狀況是雙方約定好前置機的數據結構,這個結構跟A和B的數據結構基本上是不一致的,這樣咱們就須要把應用上的數據按照數據標準推送到前置機上,這個研發工做量仍是比較大的;

  • 文件模式: 數據交互的雙方A和B是徹底的物理隔離,這樣就只能經過以文件的方式來進行數據交互了,例如XML格式,在應用A中咱們開發一個接口用來生成標準格式的XML,而後用優盤或者別的介質在某一時間把XML數據拷貝以後,而後接入到應用B上,應用B上在按照標準接口解析相應的文件把數據接收過來;

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

二、DEMO實戰

二、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:全面進階的一個稍微複雜的例子

ž根據客戶,賬戶,交易表中的數據,生成對應的數據文件,將數據文件能夠導入到對應表中,而且能夠用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,開始運行
當全部狀態都變已完成時,則轉換完成,如圖:

三、Demo下載

相關文章
相關標籤/搜索