1. 程式人生 > >pentaho kettle 實現資料庫間增量同步

pentaho kettle 實現資料庫間增量同步

 今天剛接觸 etl工具, 公司要求要實現一個 資料庫同步任務,要求從兩個表中同步資料。所以寫下這篇部落格記錄一下。

思路:

    常用的同步機制 就是  在A表中新增 時間戳欄位  命名為 LastModifiedTime , B 表也新增相同的欄位。

   在同步的時候,查詢A 表的 所有條目中 最大的更新時間, MAX(LastModifiedTime) ,在B表中只要

Select * From B where LastModifiedTime >  ? 既可以查出所有的最新條目,新增 / 更新 即可, 這些在 kettle 中都有實現, 具體操作下文會講到。

1  首先下載 pentaho   http://tenet.dl.sourceforge.net/project/pentaho/Data%20Integration/6.0/pdi-ce-6.0.1.0-386.zip 
 解壓到磁碟 

2  因為任務後面需要mysql 資料庫之間的同步,所以先將mysql 驅動jar包加入lib目錄下, 由於這裡有三個 lib 目錄 ,分別是Data Service JDBC Driver   lib     libswt\win64  ,我不知道應該加入哪個目錄,於是乾脆點直接把mysql的jar包每個目錄都加了一遍。  之後在安裝目錄開啟命令列啟動Sqoop.bat   顯示如下介面

3 首先雙擊 "作業"  ----》 "通用" ----》雙擊 START  出現如下介面

 

,接著可以雙擊右邊的Start圖示進行編輯


這個介面可以設定啟動選項,要設定定時執行,勾選重複,然後設定型別為時間間隔, 以分鐘的間隔 和  以秒計算的間隔分別是你想設定的定時。 我的同步任務是 以5 秒為單位同步一次所以設定上這樣

。編輯好後記得ctrl+S儲存檔案到桌面。

4    儲存完後關閉介面,又回到最上層  。 雙擊轉換建立一個轉換工程, 雙擊 “輸入”--》“表輸入” , 會在右邊建立一個可以連線資料庫連線,進入編輯介面 點選新建  設定資料庫引數,命名為 MysqlA  ,代表一個輸入源。

點選確定後,編輯sql輸入框輸入 ,當然這是為了獲取A表中的最大時間戳 ,點選確定。

5     再從左邊導航欄新增一個  表輸入 選項,重複上一步操作, 此 表輸入 部件 是用來獲取B表中所有大於  "上一步最大的時間戳" 的所有條目 , 當然這時候也需要新建一個數據庫連線,指向的資料庫當然就是 B 表所在的資料庫 ,可以命名為 MysqlB。

此時,需要點選 ” 獲取查詢語句“  ,在資料庫瀏覽器中選擇你需要的表  如圖所示

該操作會為你自動生成 查詢sql語句, 這時候我們需要在最後一行手動新增自己的 WHERE  條件  

問好就代表 從上一個輸入源  獲取 A表的最大的時間戳

其中再最下方 勾選如下,點選確定儲存。

  

6  接著在最左邊導航欄中 選擇 "輸出" ---》 ”插入/更新“  , 

此時設定的資料庫連線 應該選擇 A  資料表的 資料庫,目標表應該選擇 A 表 我這裡是 test1 ,

在下方  "用來查詢的關鍵字"

設定上查詢的關鍵字 ,這裡通常選擇 主鍵

然後在下方更新欄位中 設定  獲取更新欄位, 會自動獲取表中的所有 需要更新的欄位 ,當然很重要的一部就是需要把主鍵的更新選項設定為N

這一步如果不選會報  主鍵重複錯誤。

點選確定儲存。 

之後介面上已經有三個  部件, 按住 SHift + 滑鼠左鍵  可以用箭頭連線兩個  部件 以此從左網友連線。

點選執行即可測試。此時也記得儲存 到桌面。

7   上一步如果成功了, 需要講轉換和 定時任務結合。   此時關閉介面  在主物件介面中選擇第2步建立的作業 ,   雙擊 “通用” --- 》 “轉換”  , 在編輯轉換

將轉換檔名指向前面索儲存的  “轉換檔案”  , 並講兩個連在一起 ,執行即可實現5秒同步資料庫。

成功後可以在B 資料表 新增 更新 表, 會自動同步到 A

大功告成,第一次寫部落格真的很累,如果有不詳細的地方可以留言問我。