使用Kettle進行資料探勘
阿新 • • 發佈:2019-02-07
客服部CRM系統的部分資料要同步BDP雲端,為了伺服器安全,賬號密碼不被任何第三方獲取,部署中間伺服器、中間庫,抽取CRM的資料,然後再同步到bdp雲端庫中。
ETL(Extract-Transform-Load的縮寫,即資料抽取、轉換、裝載的過程)。
Kettle作為Java編寫的ETL工具,支援圖形化的GUI設計介面,然後可以以工作流的形式流轉,在做一些簡單或複雜的資料抽取、質量檢測、資料清洗、資料轉換、資料過濾等方面有著比較穩定的表現,其中最主要的我們通過熟練的應用它,減少了非常多的研發工作量,提高了我們的工作效率。
環境要求:本地部署有java環境(JDK1.5或以上版本,怎麼部署java環境我這裡就不描述了,詳情可以自己找度娘)。
首先下載kettle檔案,Kettle可以在http://kettle.pentaho.org/網站下載, 解壓kettle到D盤
進入d:/kettle/data-integration目錄,開啟spoon.bat檔案,開啟介面如圖:
資源庫連線介面,是把建立的轉換和工作儲存到資源庫中,現在不需要,直接關閉就可以。
1、Transaction 轉換
我們首先建立轉換,雙擊上面的轉換,kettle有個好處,所有的操作都可以像拖拽流程圖一樣,裡面具體的專案我這邊不做描述了,可以參照kettle操作手冊。
1.1建立DB連線,客戶部的crm系統是基於yii框架開發的,開發語言為php,資料庫為mysql,這裡我就不使用真實伺服器作為案例了,涉及到公司的伺服器資訊,還是保密的好。
建立db連線local1(源資料庫),local2(目標資料庫).
在這裡提示一下,抽取的資料有日期型別(date、datetime等),在Mysql資料庫中使用DATETIME型別來儲存時間,使用JDBC中讀取這個欄位的時候,應該使用 ResultSet.getTimestamp(),這樣會得到一個java.sql.Timestamp型別的資料。在這裡既不能使用 ResultSet.getDate(),也不能使用ResultSet.getTime(),因為前者不包括time資料,後者不包括date資料。
但是在使用ResultSet.getTimestamp()時也不是完全安全的,例如,當資料庫中的TIMESTAMP型別的欄位值為 '0000-00-00 00:00:00'時,使用此方法進行讀取,會丟擲異常:Cannot convert value '0000-00-00 00:00:00' from column 1 to TIMESTAMP,這是因為JDBC不能將'0000-00-00 00:00:00'轉化為一個為一個java.sql.Timestamp,在Java中,想建立一個java.util.Date,使其值為 '0000-00-00'也是不可能的,最古老的日期應該是'0001-01-01 00:00:00'。
解決方案是在資料庫連線位置新增zeroDateTimeBehavior=convertToNull
1.2建立表輸入,獲得要抽出的資料
1.3建立表輸出,將抽出的資料填充到目標資料庫的表中
1.4建立執行順序
按住shift按鍵,由表輸入指向表資料
這樣資料抽取就完成了,儲存轉換,名稱為trans1,下一步我們設定定時執行轉換。
2、Job
關閉trans1,建立job
點選執行,測試該job是否正常執行
儲存為job1.kjb3、呼叫Kitchen.bat執行Job
在kettle的data-integration目錄下建立job.bat檔案,內容如下:
cd D:\kettle\data-integration
Kitchen.bat /file:D:\tongbu\tongbu.kjb /level:Basic>>D:\etl.log
其中該bat必須放在該目錄下,不然執行時會提示找不到檔案。
執行該bat,檢視etl.log目錄執行日誌是否正常執行。
WARNING: Using java from pathDEBUG: _PENTAHO_JAVA_HOME=
DEBUG: _PENTAHO_JAVA=java.exe
INFO 09-02 08:34:00,410 - Using "C:\Users\ADMINI~1\AppData\Local\Temp\2\vfs_cache" as temporary files store.
INFO 09-02 08:34:01,268 - Kitchen - Logging is at level : 基本日誌
INFO 09-02 08:34:01,268 - Kitchen - Start of run.
INFO 09-02 08:34:01,471 - tongbu - 開始執行任務
INFO 09-02 08:34:01,471 - tongbu - 開始項[Transformation]
INFO 09-02 08:34:01,487 - Transformation - Loading transformation from XML file [D:\tongbu\crm2bdp111.ktr]
INFO 09-02 08:34:01,763 - Transformation - 為了轉換解除補丁開始 [crm2bdp111]
INFO 09-02 08:34:01,898 - Transformation - 這項轉換可以被回放 回放日期是: 2017/02/09 08:34:01
INFO 09-02 08:34:02,648 - 刪除leads - Finished reading query, closing connection.
INFO 09-02 08:34:02,650 - 刪除leads - 完成處理 (I=0, O=0, R=0, W=1, U=0, E=0
INFO 09-02 08:34:04,692 - 表輸入 - Finished reading query, closing connection.
INFO 09-02 08:34:04,711 - 表輸入 - 完成處理 (I=3064, O=0, R=0, W=3064, U=0, E=0
INFO 09-02 08:34:10,351 - 插入 / 更新 - 完成處理 (I=3064, O=3064, R=3064, W=3064, U=0, E=0
INFO 09-02 08:34:10,353 - tongbu - 完成作業項[Transformation] (結果=[true])
INFO 09-02 08:34:10,353 - tongbu - 任務執行完畢
INFO 09-02 08:34:10,355 - Kitchen - Finished!
INFO 09-02 08:34:10,356 - Kitchen - Start=2017/02/09 08:34:01.268, Stop=2017/02/09 08:34:10.355
INFO 09-02 08:34:10,356 - Kitchen - Processing ended after 9 seconds.
4、開機啟動bat呼叫kitchen.bat呼叫job
建立job.bat的快捷方式存放到開機啟動目錄下,然後重啟計算機看該bat正常啟動,OK沒問題。