1、什麼是ETL java
ETL,是英文 Extract-Transform-Load 的縮寫,用來描述將數據歷來源端通過抽取(extract)、轉換(transform)、加載(load)至目的端的過程。ETL一詞較經常使用在數據倉庫,但其對象並不限於數據倉庫。 mysql
2、Kettle簡單說明 sql
Kettle是一款國外開源的ETL工具,純java編寫,能夠在Window、Linux、Unix上運行,數據抽取高效穩定。 數據庫
3、需求 windows
一、 Mysql 5.X數據遷移到 DB2 8.X 服務器
二、 主鍵自增改爲32位UUID 工具
3、準備工做 測試
一、 源數據庫:Mysql 5.6 spa
二、 目標數據庫:DB2 8.X 設計
三、 數據遷移工具:Kettle6.0.0.0-353
4、實戰開始
一、說明一下省略掉的步驟
在開始使用Kettle前,我使用了PowerDesigner18.6創建數據模型,而後導出對應數據庫的建表腳本,這裏我導出了DB2 8.X的建表腳本,而後首先在DB2中將目標表創建好。其實在Kettle中也能夠在執行過程當中來創建表,我也是初學Kettle,因此選擇了一種相對簡單的方式來操做,畢竟關注重點在於數據遷移這方面上。
二、安裝JDK
由於Kettle是純JAVA寫的,因此依賴JDK,至於JDK的安裝不是本文的重點,請讀者自行百度完成。
三、 安裝Kettle
下載pdi-ce-6.0.0.0-353.zip,我已經上傳至百度雲,下載地址:http://pan.baidu.com/s/1jGjMoXw
Kettle是綠色免安裝的,將下載的壓縮文件解壓,找到程序啓動文件Spoon.bat(Linux的Spoon.sh),雙擊則能夠啓動。不過在這一步操做以前,還有重要的一步須要作,就是拷貝咱們的數據庫驅動JAR包到指定目錄。我是windows 7 x64,因此我將mysql和DB2對應的驅動包拷貝到了data-integration\libswt\win64目錄下,由於拷貝進去以後,須要重啓程序才能生效,因此建議解壓後,首先拷貝驅動JAR包到指定目錄。
而後點擊Spoon.bat,啓動應用程序。
程序啓動完成後,進入到歡迎頁面,在頁面左邊有一棵樹,在「主對象數」下分別是「轉換」和「做業」兩個功能節點,另外還有「核心對象」菜單,這個是用得比較多的,稍後會談到。
至此,Kettle的安裝已經完成,下面就進入到實戰的重要環節了。
三、開始使用Kettle作數據遷移
這裏我不講太多理論知識,畢竟我對Kettle也是初探,因此本文重點仍是放在如何操做Kettle完成一次數據遷移。
第一步:創建轉換(Transformation)
雙擊Spoon.bat啓動Kettle,點擊界面左上角的「文件」 – 「新建」 – 「轉換」,並保存爲demo.ktr。
第二步:添加「表輸入」
在左側的「核心對象」下面找到「輸入 – 表輸入」,將其拖入到右側編輯區域中。
第三步:編輯「表輸入」
雙擊編輯區域的「表輸入」,進入編輯界面。
在彈出窗口中,能夠編輯信息,點擊「新建」
在彈出窗口中錄入源數據庫(mysql)的服務器信息,點擊測試按鈕,測試鏈接是否成功。
注意:若是前面沒有將數據庫的JAR包拷貝到指定文件目錄下,這裏會拋出異常說找不到驅動程序。只須要拷貝JAR包到指定文件(根據系統不一樣而有所不一樣,請看Kettle的安裝部分),而後重啓程序,就能夠解決該問題。
測試鏈接成功,點擊「肯定」,而後在「數據庫連接」處選擇咱們新建的鏈接。
點擊「獲取SQL查詢語句」
在彈出窗口中選擇要遷移的數據表,每次只能操做一個表
選擇「是」
點擊「肯定」,源數據則配置好了。
第四步:添加和編輯 「字段選擇」(可選)
若是你的數據類型在遷移過程當中會發生變化,那麼須要添加「字段選擇」步驟。好比我在遷移過程當中,須要將自增的整形字段改爲32位的UUID,至於爲何會出現這樣的需求,是由於我在遷移過程當中發現若是在目標數據庫中設置主鍵自增,那麼數據遷移的過程當中,沒法插入主鍵,只能由數據庫去操做自增,這樣的話,會致使我原來的關聯數據沒法完成遷移。從此次的教訓中獲得經驗,之後數據庫主鍵設計時,會發生主外鍵關聯的,儘可能設計成UUID。
在「核心對象 – 轉換」下找到「字段選擇」,將其拖入到右側編輯區域。
按住「shift」,而後從「表輸入」到「字段選擇」,拖一條線
雙擊「字段選擇」,進入編輯界面
選擇「元數據」
點擊「獲取改變的字段」
在這個地方,你能夠修改源數據表字段,用以匹配目標數據表。我在這裏須要將原來的主外鍵都改爲32位的UUID,由於我已經事先在目標數據表(DB2)定義了主外鍵爲VARCHAR(32),因此這裏我須要修改源數據表的主外鍵爲String,長度不用管。
點擊肯定
第五步:添加「表輸出」
在「核心對象 – 輸出」下面選擇「表輸出」,拖到右側編輯區域
按住「shift」從「字段選擇」往「表輸出」拖一個箭頭,並選擇「主輸出步驟」(拖線過程當中,鼠標點擊「表輸出」的時候會出現該選項)。
雙擊「表輸出」,選擇「新建」
和前面相似,在彈出窗口中輸入數據庫的地址信息,點擊測試
測試鏈接成功,點擊肯定,在「數據庫連接」處選擇新建的DB2的目標數據庫鏈接
選擇「目標模式」(這裏我不太懂,總之DB2的話,出現的是schema),而後選擇「目標表」,點擊肯定
勾選「指定數據庫字段」,而後點擊「輸入字段映射」
在彈出窗口中,選擇源數據表字段和目標數據表字段的匹配方式,點擊「猜一猜」能夠一鍵分配,可是它的分配規則我不瞭解,可能根據名字的類似度吧,若是名字相同或者類似,可使用,很方便。
點擊肯定。
第六步:「校驗這個轉換」
點擊「校驗這個轉換」,能夠校驗剛纔咱們定義的這個轉換是否有問題。
若是沒有問題,則表示咱們定義的這個轉換能夠執行
第七步:「運行這個轉換」
點擊「運行這個轉換」,則開始執行數據遷移了,能夠在窗口下面看到執行日誌,若是沒有錯誤,那麼表示咱們完成了一個表的數據遷移工做。
批量操做
若是還有更多的表,能夠在這一個轉換中定義多個上圖所示的「表輸入」-「字段選擇」-「表輸出」步驟,一次批量執行。可是這樣的執行是不保證執行順序的,若是有主外鍵關聯的話,這樣批量執行會出問題。因此能夠將有主外鍵關聯的表的數據遷移工做作成多個「轉換」,而後經過做業將他們串起來,這樣就可以保證執行順序了,至於做業的創建,本文再也不累述,之後有時間再開一篇文章單獨寫,讀者也能夠本身找資料看看,簡單的操做的話,一看就會了。
大概的做業我用圖展現一下,詳細的我就不寫了。