Pentaho BIServer Community Edtion 6.1 集成了 Kettle 组件,可以运行Kettle 程序脚本。但由于Kettle没有直接发布到 BIServer-ce 服务的程序,所以,在本地(Windows环境)通过图形化界面开发完成的ETL 脚本 (.ktr & .kjb) ,需要上传到BIServer-ce 管理的资源库,才能被BIServer-ce 运行和调度。
重点:Kettle 资源库 与 BIServer-ce 资源库 建立一致的目录管理ETL脚本文件。
第一部分 Kettle 脚本开发
1 创建资源库,并登录
此处使用MySQL 资源库方式。
2 新建MySQL库同步Job
基本逻辑:读取源数据库所有表明,保存在结果集中,对结果集的每一行数据即每一个表名,执行同步任务。其中同步任务是指清空目标数据库指定表,将源表数据输出到目标表。
整个MySQL库同步作业包括五个文件。均存储在资源库的 /home/spads/ 目录下,两个Job :
job_all_table_extract.kjb 、job_single_table_extract.kjb
三个trans:
trans_acquire_tableNames.ktr、trans_Single_TableName_Set.ktr、trans_Single_Table_extract.ktr
3 本地测试程序是否可以运行
执行 job_all_table_extract.kjb ,验证程序是否成功执行。
可选择线上测试运行,根据需要选择。
第二部分 发布Kettle脚本到 BiServer-ce
BIServer-ce 使用资源库管理程序文件,登录http://IP:8080/pentaho 后,可以点击 Browse Files 浏览程序文件。
由于 Kettle 资源库和 BIServer-ce 资源库表结构无关,所以不能直接通过数据库发布Kettle 脚本。需要在Kettle 中导出*.ktr 和 *.kjb 文件,通过资源管理页面,上传到BIServer-ce 的资源库。
此处需注意,Kettle 资源库中5个脚本文件存在目录引用关系,所以需要在BIServer-ce 资源库中建立对应的文件目录,并将到处的脚本文件发布到指定的目录,脚本文件才可以运行成功。
1 导出kettle 脚本
注意文件名
2 在BIServer资源库中建立与Kettle 资源库一致的文件目录
Kettle 脚本在Kettle资源库中的存储路径为 /home/spads,BIServer-ce 资源库的默认根目录为/home 因此在/home目录下新建目录 spads
3 上传kettle 脚本到对应的文件目录
第三部分 运行、调度Kettle 脚本
在资源浏览中选择JOB,可以选择右边的动作 Run in background 执行,并可以通过open 查看执行日志。 也可以选择Schedule 进行调度处理。
注:Kettle 执行表输入表输出时,可能会出现字符集乱码问题。一般需要检验作业或者转换使用的DB 连接的连接参数,
characterEncoding utf8 指定连接字符集为 utf8 (MySQL使用,其他数据库使用UTF-8)
还有一些数据问题,比如MySQL输入表中存在日期为 0000-00-00 00:00:00, 会导致表输入读取错误,可以通过配置
zeroDateTimeBehavior convertToNull
还有Kettle 默认会把空字符串转换为NULL,如果输入表和输出表对特定字段均限定不许为空,则会导致表输出错误,为解决此问题,需要配置Kettle 的配置文件,此文件通常存放在/用户名/.kettle/目录下,此处为/root/.kettle/kettle.properties
在里面增加一行:
KETTLE_EMPTY_STRING_DIFFERS_FROM_NULL=Y