使用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

相关文章
相关标签/搜索