您的位置:首页 > 其它

使用Kettle进行数据挖掘

2017-02-11 20:08 155 查看
客服部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.kjb

3、调用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 path

DEBUG: _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没问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息