`
hello_leio
  • 浏览: 1006 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

使用Kettle进行数据挖掘

阅读更多

 

使用Kettle进行数据挖掘

 

客服部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

 

 

 

 

 

 

 

 

保存为job1.kjb

 

3、Kitchen.bat执行Job

 

4、开机启动bat调用kitchen.bat调用job

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics