使用Kettle进行数据挖掘

原创
2017/02/11 20:17
阅读数 625

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

展开阅读全文
打赏
0
2 收藏
分享
打赏
0 评论
2 收藏
0
分享
返回顶部
顶部