使用kettle同步数据

如果这篇文章能给你带来帮助,不胜荣幸,如果有错误也请批评指正。共同学习一块进步。

  题外话:进入了2024.我决定做什么事都要持之以恒,首先是按时学习,按时记笔记,按时复习巩固。刚才看了一下,上年就想写出来,结果没有实现的。今年要好好处理一下这个事!

 太多了。好多东西觉得是个知识点。都想着写出来,到最后又都放弃了。

  好了言归正传。今天主要写kettle同步数据。我只做一个小的简单的例子。其他的功能大家可以自己摸索

  例如:我要将A表的数据同步到B表当中,同步过了的数据编辑字段sync的值为1.未同步到B表当中的数据sync字段用5来表示。同步过去之后再进行修改。

  首先,下载kettle数据同步图形化界面工具spoon,我下载的版本为:7.1。具体下载地址为:很抱歉,忘了!以后再说吧。

  这里有几个坑:一个是kettle没有mysql的驱动,你需要自己去下载对应的版本驱动。  https://blog.csdn.net/qq_36813879/article/details/113990570

  另外一个是防火墙规则设置,不一定大家能遇见。尽可能的给大家写一下解决方法。  https://blog.csdn.net/xiongben0102/article/details/120331961

  上面两个链接,是我去网上搜的,至于管用与否,我不知道,因为我的防火墙已经关了,mysql的驱动,我电脑上之前有。放到位置上就可以了。

  下载之后找到data-integration文件夹下面的Spoon.bat按钮,双击两次打开

  图形化界面打开之后。如果要进行数据的抽取,转化和加载这三个简称(Extract-Transform-Load【ETL】)。你需要先创建一个转换,这个转换可以进行数据的抽取,转换,和加载等操作(下面将其命名为三步走)。你可以理解为:对数据的操作的流程。你需要建立一个流程。

  具体步骤为:左上角,文件-->新建-->转化

  例如我建立的: 

   你可以对他进行重命名之类的任何操作,非功能性操作,这里不做过多讲解;

  

  继续测试从A表同步到B表,再修改A表的同步标识,那么首先第一步就是链接数据库;点击左上角主对象树,点击DB连接,选择一般就可以了,输入你的连接名,数据库信息等参数,点击测试,如果成功会提示连接成功。

       

  继续往下,既然是A表不断同步数据到B表,那么要先把A表当中的数据查出来,这是我在数据库创建的A表,B表和A表一样,只是少了sync【5:未同步;1:已同步】同步标识这一列。

  

   

   再创建的转化中,从数据库表当中取数据的方法也有很多,具体可以参考左上交的核心对象,里面有很多小的功能。做测试我选择使用  核心对象-->输入-->表输入

  双击表输入就会显示在右边整个转换的工作区域了。。双击表输入,可以对表输入这个步骤进行编辑,包括改名字,编辑数据库,编写sql语句,查看sql结果预览等等。例如这是我的编辑界面【图1】            和                                 预览界面【图2】

  【图1】         

    【图2】

     到现在已经从A表里面拿出来数据了,那么怎么把他存到B表当中呢,需要另外一个功能模块。那就是表输入  步骤:核心对象-->输出-->插入/更新   在这里我选择的是插入/更新。可以使用其他功能模块来展示,能实现效果即可。双击插入/更新,添加到转换区域。默认会有指向箭头。如图

     

  同理:双击插入更新可以进入插入更新步骤的编辑界面,默认是你配置的数据库。你可以选择其他库。选择插入的目标表的表名,点击获取字段,自动回显查询的关键字。主要是下面更新字段区域。表字段指的是,要插入的B表中的字段,流字段,是从A表中查出来通过流插入到B表中的字段。

       更新是Y(yes),不更新可以选择N(no).要根据实际情况对应,例如我是两张表结构都一样,我就一一对应,例如你想把A表的ID字段存到你B表的name字段当中,你就表字段name,流字段选择ID。【以上均是个人理解,有不同的意见可以留言,我看见了将予以改正】

  

    点击确认,到目前位置已经完成了取数据和插入更新数据。为了了解清楚这次都执行一遍,我每次执行执行两条,先对5条数据进行操作。第一次,先对字段进行操作,例如将A表里面的ID存入B表的name字段。可以测试一下,点击执行按钮【图3】,会选择让你保存,选择合适位置进行保存。然后继续运行。运行效果如下【图4】【图5】

   【图3】                                           【图4】   【图5】

  可以看见那个步骤执行的  读写  输入  输出数量。再去数据库进行,下面是AB两个表结果。 可以发现确实是A表的ID字段数据同步到了B表的name字段上。表字段和流字段验证完成之后,把插入/更新步骤里面的字段改成对应的就好了

 

 

  A表 :                         B表:

       

  继续,现在只是完成了同步了,现在开始让同步了的A表的数据,把sync字段的值由5改成1.下次我再查数据的时候我就查询未同步的数据进行同步。那么再继续加一个修改字段标识的步骤。这次我加的是  执行sql脚本  这个步骤。(步骤-->脚本-->执行sql脚本)

  双击添加到转化界面。再次在转化区双击执行sql脚本步骤,对步骤进行编辑。 再sql区域,我编写了 update  a  set sync = 1 where id = '?' 这个。其中变量用   ‘?’来表示,对应下面的参数 ID.我这个A表是根据ID当主键的,其他的按需匹配。选择地下的执行每一行。只要是涉及到的,都会执行。

  

  现在是这样的:回发现在插入/更新 到  执行sql脚本中间有一个复制的  图标 ,悬浮显示:黄色的文字。他的意思是  执行sql脚本的步骤,所需要的参数或者数据流是从哪里来的呢?是从原始数据来的,原始数据是什么呢?在我们这里值得就是  表输入当中的查询出来的数据。

  他这么说的主要作用是说,假如我再插入/更新模块进行了更新或者其他操作,没事,因为这里是按照原始数据表输入的数据来执行的。

  

  去数据库把B表清空,重新执行操作,结果如下。  可见A表当中的数据已经被同步到B表当中了,同步的标识字段sync 也已经被改了。那么到现在为止。已经完成了转化这个功能,也就是说把A表的数据同步到B表并修改A表同步标识的字段。

  A表:                                                                                   B表:

 

       那么我要是有二十万条呢?或者我A表的数据是其他地方推送(通过)过来的呢?这就需要  ‘作业’ 了。 点击左上角文件-->新建-->作业

  则会新建一个作业,这个作业的作用就是用来操作刚才新建的转化的。

  在作业窗口选择左上角通用-->START  双击START.会在作业窗口显示出来。双击START,进入编辑界面,在这里你可以选择什么时候执行,是否重复执行,什么条件重复执行等等,例如我选择了每10分钟重复执行【图6】 。具体条件看个人需求

    

                【图6】                           【图8】【图9】

 

 

   再然后点击通用-->转换,双击转换,将转换步骤添加到作业窗口,再次双击打开转换的编辑界面【图7】,选择刚才写好的转换。点击确认。再选择通用-->成功 ,双击成功,添加到作业界面。  如图【图8】。选中START 摁住 shift  键从START向转化界面扯出流程线。这样整个就完成了【图9】。启动START 就可以按照设定的时间,不断的进行转化了。

  当然你也可以通过bat  来执行。看个人喜好。因为我也是自学的,如果有错误请批评指正,如果觉得有用请分享给更多人。希望大家共同学习,一起进步!!!

 

 

  

   

 

 

 

 

  

 

 

 

 

 

 

 

  

posted @ 2024-05-16 17:58  也许已没有也许  阅读(87)  评论(0编辑  收藏  举报