1、什麼是ETL
ETL (Extract-Transform-Load),用來描述將數據從來源端經過抽取(extract)、清洗轉換(transform)、加載(load)至目的端的過程。通俗的說法就是從數據源抽取數據出來,進行清洗加工轉換,然後加載到定義好的數據倉庫模型中去。
2、爲什麼要用ETL工具?
(1)當數據來自不同的物理主機,這時候如使用SQL語句去處理的話,就顯得比較吃力且開銷也更大。
(2)數據來源可以是各種不同的數據庫或者文件,這時候需要先把他們整理成統一的格式後纔可以進行數據的處理,這一過程用代碼實現顯然有些麻煩。
(3)在數據庫中我們當然可以使用存儲過程去處理數據,但是處理海量數據的時候存儲過程顯然比較吃力,而且會佔用較多數據庫的資源,這可能會導致數據資源不足,進而影響數據庫的性能。
3、ETL的優點
(1)支持多種異構數據源的連接。
(2)圖形化的界面操作十分方便。
(3)處理海量數據速度快、流程更清晰等。
4、ETL使用的工具
(1)Kettle:免費,開源,使用純java編寫,只需要jvm環境即可部署。可跨平臺,擴展性好。
(2)Datastage:IBM公司的商業軟件,最專業的ETL工具,價格高,大數據量下處理速度快,穩定。但部署有一定難度。
(3)Informatica:商業軟件,價格便宜。適合大規模ETL應用。部署需要服務器和客戶端的安裝,廣泛支持各類結構化、非結構化的數據源。
本次介紹以Kettle爲例。
5、數據移植目標
(1)保證在新系統上線後,業務上與舊系統的連貫性。
(2)數據移植的整個過程要保證在3個小時以內。
6、數據移植流程
數據移出→數據清洗→數據移入
(1)數據移出
新舊系統、業務規則差異分析。首先要分析新舊系統數據差異,確定需要移植的數據範圍。
(2)數據清洗
冗餘的數據清除
殘缺的數據補錄
錯誤的數據糾正。
(3)數據移入
根據中間表進行移入處理,移入檢核,將移入後數據加載到新核心,制定移植專項測試計劃,維護移植測試環境的核心應用。
7、數據移植工具Kettle使用方法
在官網http://kettle.pentaho.com/下載並解壓Kettle軟件,需要JRE環境支持。移植過程大致分爲5個步驟:
創建源表→創建目標表→創建映射→創建工作流及任務→啓動工作流。
(1)雙擊Spoon.bat運行軟件,點擊“沒有資源庫”,進入主界面。左上角點擊”文件-新建-轉換“保存爲demo.ktr。
(2)左側選擇“核心對象”面板。”在“輸入”文件夾下選擇“表輸入”並把它拖動到右側編輯區。
(3)雙擊編輯區的“表輸入”圖標,編輯數據輸入來源。點擊“數據庫連接”右側的“新建”按鈕,按demo背景中的要求,配置數據庫參數。配置後點擊“Test”,若配置有誤將彈出異常提示,根據提示修正。若無誤將顯示如下信息:
注意:如果連接失敗,請在安裝目錄Kettle\data-integration\lib中加入對應的數據庫驅動
點擊“確定”和“OK”,我們爲此表輸入對象確定了數據庫。
(4)繼續點擊“獲取SQL查詢語句”,選擇輸入表。這裏我們選擇EMPL這張表。
點擊“確定”完成表輸入對象的編輯。
(5)在左側“核心對象”中的“轉換”文件夾中選擇“字段選擇”功能,拖動到右側編輯區。按住鍵盤shift同時鼠標從“表輸入”爲起點,“字段選擇”爲終點畫一條連接。如圖:
(6)雙擊“字段選擇”,打開編輯窗口,選擇“元數據”面板,點擊右側“獲取改變的字段”,將自動列出之前表輸入中所有字段。
(7)根據要抽取的目標表字段名(輸出字段名),給每一個輸入字段改成和輸出字段相同的名稱。同時請務必在Encoding一欄中選擇輸出庫的編碼。根據demo的背景要求,我們選擇utf-8。
(8)編輯完“字段選擇”後點擊“確定”關閉窗口。同上,在“輸出”文件夾中拖動一個“表輸出”到右側編輯區,並畫連接。
(9)雙擊“表輸出”打開其編輯窗口。同“表輸入”一樣,按照demo背景要求,配置好本地庫。
(10)同“表輸入”,選擇輸出的目標表。選中“指定數據庫字段”選擇後在“數據庫字段”面板中點擊“輸入字段映射”。
(11)因之前已經在“字段選擇”中爲每一個輸入字段改名,這裏點“猜一猜”,會根據字段近似度自動匹配映射關係。
映射完輸入輸出字段的關係,檢查無誤後,點擊“確定”。
(12)至此,我們最簡單的一個抽取示例的轉換建立完畢,點擊“校驗這個轉換”,Kettle會校驗並給出簡單的報告。
(13)點擊“運行這個轉換”,選擇“本地執行”,點擊“啓動”來執行這個轉換。
(14)轉換的過程可以在控制檯實時顯示。同時“日誌”的詳細程度是可選的。
(15)執行完畢後,控制檯日誌若無異常信息,說明轉換成功,我們可以去本地庫查看。發現確實已被導入新庫,兩者記錄數相同。
(16)如果遷移結果出現亂碼,可以通過以下方式解決。例如本次我使用的源是Oracle(GBK),目標庫是MySQL(utf-8),遷移結束髮現中文全部亂碼,這時,點擊“表輸出”,重新編輯我們之前設置好的目標數據庫連接
點擊“編輯”“選項”,輸入參數:characterEncoding:utf8(目標庫的編碼格式)
保存,重新執行任務即可解決亂碼問題。