PHP能调用kettle的job吗,Kettle新手入门

一、Kettle的简单介绍

Kettle是一款国外开源的ETL工具,纯java编写,可以在Windows、Linux、Unix上运行,数据抽取高效稳定。

Kettle 中文名称叫水壶,该项目的主程序员MATT 希望把各种数据放到一个壶里,然后以一种指定的格式流出。

ETL是EXTRACT(抽取)、TRANSFORM(转换)、LOAD(加载)的简称,实现数据从多个异构数据源加载到数据库或其他目标地址,是数据仓库建设和维护中的重要一环,也是工作量较大的一块。

kettle有两种脚本transformation(转换)和Job(作业)

Kettle有三个主要组件:Spoon、Kitchen、Pan

Spoon(汤勺):是一个图形化的界面,可以让我们用图形化的方式开发转换和作业。windows选择Spoon.bat;Linux选择Spoon.sh

Kitchen(厨房):利用Kitchen可以使用命令行调用Job

Pan(盘子):利用Pan可以用命令行的形式调用Trans

Carte(菜单):Carte是一个轻量级的Web容器,用于建立专用、远程的ETL Server。

现在Kettle已经改名为pdi-ce,但是大家还是习惯叫Kettle。本文采用的Kettle版本是pdi-ce-8.3.0.0-371

043ab2874b46a536ae65b4743581b070.png

二、下载并配置相关环境变量和创建表

kettle官网可以下载,由于文件有1个多G,可能比较慢。因此我把它上传到网盘供大家下载。

链接: https://pan.baidu.com/s/1_VaZmYfSxyWQePL18Wp3gQ

提取码: 4uvm

因为Kettle是基于Java的需要安装JDK并配置环境变量。JDK环境变量配置方法这里就不赘述了。

下面是JDK1.8的网盘地址:

链接: https://pan.baidu.com/s/1Yvn0BY8zJZq0WJSvZ2FiZA

提取码: rdas

下面为了测试方便,采用单机同库不同表演示。

原表:lh_local_news(数据源)

表结构:

260d9bd5d40248a55ebc947fbd2f07ed.png

新表:target_news(数据接收表)

表结构:

d82fe76c6e7a4c4dbff54218ce414bac.png

三、启动Spoon

windows下需要运行Spoon.bat,linux下运行Spoon.sh:

c4db2f54fa5211ed3375296385fce764.png

如果你的机器配置不高比如内存不够,可能启动会比较慢,成功启动后会出现图形化界面:

392c35be5c1bc23189d51756672d3afc.png

双击主对象中的转换:

ae1cbaf524bfd6172b4c7432cb895ea4.png

会出现转换相关的选项:

8cda3b0d123bfa8fac43b3b1ed25cbc5.png

当你遇到启动不出现图形界面,可能有以下原因:

1、路径有中文

2、内存不足

3、环境变量没有设置对

四、配置一个输入

我们创建一个表输入,单击或者拖动“表输入”到右边。这时有边会多一个“表输入”如下图:

893cf8ee1616a77089d8ea95a642396a.png

双击这个新添加的“表输入”,出现以下配置选项:

8538fdf1aa492d5cc2ba3b89e22fc248.png

可以看到上面数据库连接为空,我们要新建一个连接。点“新建”:

b711845e859195b80babcdf1c31292f5.png

配置完后需要测试一下,可能会出现以下错误提示,是由于没有添加mysql的jar驱动。

错误连接数据库 [localhost_lanhu_portal_simple] : org.pentaho.di.core.exception.KettleDatabaseException:

Error occurred while trying to connect to the database

Driver class 'org.gjt.mm.mysql.Driver' could not be found, make sure the 'MySQL' driver (jar file) is installed.

org.gjt.mm.mysql.Driver

org.pentaho.di.core.exception.KettleDatabaseException:

Error occurred while trying to connect to the database

Driver class 'org.gjt.mm.mysql.Driver' could not be found, make sure the 'MySQL' driver (jar file) is installed.

org.gjt.mm.mysql.Driver

2ac7f00cddec15327aa8a881f0256cda.png

解决:下载对应mysql数据库版本的java驱动,并拷贝到kettle所在的data-integration\lib目录下,重启spoon。

注意:一定要复制对应的数据库版本,还要重启spoon。不然还是要报错。

我数据库的版本为:Server version: 5.7.23,驱动用了mysql-connector-java-5.1.47才行,甚至5.1.48都不行。

bcca9184d20e0b2e6b8d28e870d92124.png

最后在sql输入框中输入查在来源表中获取数据的sql。

a5e1e683cdb374e4782cd177ce718fcf.png

五、配置一个输出

在输出里面,拖动一个“插入/更新”到右边,选中输入,然后按着“shift”拖动到“插入/更新”

fe5730e666186394bf0a32bf645dfc66.png

并双击“插入/更新”:

ec7957ad75dcfffba4f5774f5caf7836.png

目标表选择新表target_news。查询的关键字是条件,是用来判断是插入还是更新用的,下面是要更新的字段。

注意:表字段是目标表的字段。主键id更新要选择N,不更新主键,不然会报错。

最后运行,并保存个转换为文件,demo.ktr。

六、创建Job

上面的配置的输入和输出(插入/更新),就是数据转换规则。下面需要创建一个job来运行这个转换。

aef31f2600538c9c6983157418aa499a.png

双击“作业”,然后在“通用"里面先拖动一个"start"

714848e368c45098755df628a17b0429.png

双击设置属性

197003f8d9553ad5aec657284447a629.png

上面的把间隔设置成本每20秒执行一次。确定后再拖一个”转换“出来如下图:

ae197ca3eada95566f1a4bc027478e7f.png

接下来把Start和转换连接起来,选中Start,shift拖动线。

74f8533c44696609e8bd93af22eb4510.png

然后双击”转换“设置属性如下图:

f26b93243e022da74915b626e7897ebe.png

Transformation选择上面的的转换规则文件。

最后运行,并保存个转换为文件,demo.kjb。

七、运行

49c5866f7dda8e118db1d29b0ecb90ac.png

点击小三角运行job看效果。注意原来表target_news是空表。

00e8fdb7feddbdcbe2332e69ced3f20f.png

运行成功后可以看到数据已经成功同步过来了。

如果要测试更新或增量同步。可以在原表插入表条记录或修改一条记录,等20秒左右就能在target_news中找到对应的记录。

八、通过脚本运行

除了通过上面的Spoon工具来运行转换或脚本也可以通过脚本来运行,这样不用启动图形化,性能和速度会一些。

比如cmd命令下。

运行转换:

D:\pdi-ce-8.3.0.0-371\data-integration>Pan.bat /file=D:\pdi-ce-8.3.0.0-371\data-integration\demo\demo.ktr

3e35a65684082ba8cbb0af6405a64d26.png

运行job:

4f23823de9cf1939fc9ccd09b92aee35.png

ps:其实运行job会隐式的运行转换,因为一般job里面都会添加转换。也就是Kitchen里面包含了Pan的调用。

7bdf9f8d6c03c12b176caa0752030ad9.png

更多资源:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值