使用Kettle進行數據挖掘

客服部CRM系統的部分數據要同步BDP雲端,爲了服務器安全,帳號密碼不被任何第三方獲取,部署中間服務器、中間庫,抽取CRM的數據,而後再同步到bdp雲端庫中。php

ETL(Extract-Transform-Load的縮寫,即數據抽取、轉換、裝載的過程)。 Kettle做爲Java編寫的ETL工具,支持圖形化的GUI設計界面,而後能夠以工做流的形式流轉,在作一些簡單或複雜的數據抽取、質量檢測、數據清洗、數據轉換、數據過濾等方面有着比較穩定的表現,其中最主要的咱們經過熟練的應用它,減小了很是多的研發工做量,提升了咱們的工做效率。 環境要求:本地部署有java環境(JDK1.5或以上版本,怎麼部署java環境我這裏就不描述了,詳情能夠本身找度娘)。java

首先下載kettle文件,Kettle能夠在http://kettle.pentaho.org/網站下載, 解壓kettle到D盤 進入d:/kettle/data-integration目錄,打開spoon.bat文件,打開界面如圖:mysql

資源庫鏈接界面,是把建立的轉換和工做保存到資源庫中,如今不須要,直接關閉就能夠。sql

一、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 建立表輸入,得到要抽出的數據yii

1.3 建立表數據,將抽出的數據填充到目標數據庫的表中工具

1.4 創建執行順序 按住shift按鍵,由表輸入指向表數據

這樣數據抽取就完成了,保存轉換,名稱爲trans1,下一步咱們設置定時執行轉換。

二、Job 關閉trans1,建立job

保存爲job1.kjb

三、Kitchen.bat執行Job

四、開機啓動bat調用kitchen.bat調用job

相關文章
相關標籤/搜索