一、首先去官网,因为是纯英文的。所以将其进行了翻译。
https://community.hitachivantara.com/s/article/data-integration-kettle
点击以下画红色框的线,对其进行下载。
下载完毕后,将其进行解压
Kettle是纯JAVA编程的开源软件,本地环境配置JDK1.7以上即可运行,解压后直接使用无需安装。
二、在环境变量中配置pentaho_java_home变量。值就是本地的jdk路径
配置完毕后,点击Spoon.bat
打开后耐心等待一会儿。
三、创建数据库的连接
点击转换,切换主对象树。可以看到DB连接。点击DB连接。
选择mysql的连接。输入相关的连接信息。
然后点击测试,出现以下的错误。
这是由于没有mysql的驱动包所导致的。所以要在pdi-ce-8.3.0.0-371\data-integration\lib下放入mysql的驱动包。找到对应的mysql版本的驱动包,如下载版本过低的驱动包会出现。Unknown system variable 'query_cache_size'这个错误,从而连接不到数据库。
我这下载的是mysql-connector-java-5.1.8.jar这个驱动包。可以看到测试连接成功。
点击确认
四、同步数据
新建一个转换,从输入输出里面各拖出来一个输入和输出。
在表输入里面选择数据连接,或者新建连接
然后点击获取sql查询语句
选择你要输入的表-点击确定
一旦点击是就会报出以下错误。
猜测是mysql数据库版本与mysql连接驱动(mysql-connector-java)版本冲突导致。
当前环境如下:
执行:select version();
mysql-connector-java版本为****:5.1.8
尝试了不同版本的连接驱动:
最终发现5.1.47完美解决问题
解释:
jdbc在连接数据库时候会发送测试语句SET OPTION SQL_SELECT_LIMIT=DEFAULT,而mysql 5.6及以上版本已经不支持此语句。
执行完sql 会如下图
将A表中的字段插入到B表中
表输出,就是单纯地将数据输出到另一个表。
表输出的设置:
运行结果(user_copy 表数据):将A表数据复制到B表中
我们第二次运行后,kettle 就会报错,说主键已经存在
这就表示表输出只能输出一次,如果目标表中已经存在相应的主键,则不会进行更新,会报错。
如果我们修改下表输出的设置,我们来指定下输出字段:
运行结果(user_copy 表数据):
https://blog.csdn.net/qqfo24/article/details/82190535
https://blog.csdn.net/qqfo24/article/details/82190535
可以参考这个网址对把一个表的数据更新或者新增到新的一个表中。
操作步骤如下:
点击核心对象,新建转化
然后再点击主对象树,选择DB进行连接
点击完后,点击核心对象。选择输入。点击表输入。
然后点击插入/更新
现在我们来看看User表中的数据
然后来看看test表中的数据
然后双击插入/更新
这个图只是一些说明,下图是我自己操作图。
点击确定。然后运行这个转换
点击启动,并进行保存
运行结束后,我们可以在下方看到运行结果,其中有日志,数据预览等,我们可以看到一共读取了多少条数据,插入更新了多少数据等等。
这样就完成了一个最简单的转换,从一个表取数据,插入更新到另一个表。
现在我们来看test表,就可以看到id为4的数据由订单,更新成方法了
如果想要定时运行这个转换,那么就要用到作业。
点击通用
从左侧依次拖动 START 、转换、成功到右侧,并用线连接起来。
双击 START,可以配置作业的运行间隔,这边配置了每小时运行一次。
双击转换,选择之前新建的那个转换
点击运行,就能运行这次作业,点击停止就能停止。在下方执行结果,可以看到运行的日志。
我在user表中新增一条id为1的数据
现在运行这个作业
后来发现一个小时太久了,我又设置成3分钟。运行结果
现在我们来看看数据库中test中是否有问问的那条数据
以上截图说明了定时脚本插入成功。
想要定时任务重复操作,勾选重复这项
想要一致运行这个脚本就不需要停止。如果不想跑这个脚本就点击停止的按钮。
总结
插入更新由于可以更新数据,用的比较多。
表输出,容易插入重复数据,请慎用。
定时作业,开启可以自动的更新数据,减少人工操作的成本。