• 使用kettle实现最基础的数据表同步


    最近数据交换项目上需要用到ETL工具,原来一直不太了解,经同事介绍kettle可以很方便地进行数据同步。于是简单试用了一下,实现了从源表到目标表的数据同步(包括增删改)。

    我们的需求如下:将业务系统指定表(source表)中的数据,同步到交换平台上相同结构的表(target表)中。不论source表中的数据新增、修改、删除,都会同步更新到target表中。我们的思路是,每次同步时,将source表的数据与target表的数据进行比较,标记出source表每条记录的状态(新增/修改/删除),如果是新增/修改的,就插入/更新到target表中;如果是删除的,就从target表中删除。

    测试过程如下:

    1、在数据库中建立测试用表(table_source、table_target),这两张表结构一摸一样。

     2、在kettle里新建一个转换,进行配置如下:

     

    2.1、在输入工具中,选择新增两个“表输入”步骤,双击进行配置,分别选择source表与target表:

     因为是测试简单起见,就是获取全部数据了(其实实际情况下,不太可能这么干,否则每次同步都是全量数据获取,会有性能问题。因此在生产库中操作时,可能还需要考虑根据日期、时间戳等字段进行过滤,控制数据范围)。

    2.2、在连接工具中,选择新增一个“合并记录”步骤,双击进行配置:

     其中旧数据源选择target表,新数据源选择source表。不要搞反了。合并记录的功能,就是对指定的新旧数据源进行逐条对比,并通过flagfield标志字段,给出哪些记录是新增的(new),哪些是修改的(changed),哪些是删除的(deleted),哪些没有变化(identical)

    2.3、在“Flow”工具中,选择新增一个Switch/Case步骤,用来做不同的处理;在“输出”工具中,选择新增一个“插入/更新”步骤、一个“删除”步骤:

    2.4.1、测试一下新增的情况。我们在source表里手工添加几条数据试试,可以看到数据全部到了target表中:

     2.4.2、新增、修改、删除一起来测试一下(新增1条id为10的记录、删除1条id为9的记录、修改id为4的记录,将c2字段改为“DDDDDDD”),target表也全部同步更新了:

    3、如果需要在target表里增加一个日期字段(opr_date),来记录一下数据同步的时间,要怎么做呢?稍微有点麻烦,不知道同学们们有无更好的方案。我是这么做的:

     在“转换”中增加一个“字段选择”步骤,在“输入”中增加一个“获取系统信息”步骤,分别配置如下:

    修改“插入/更新”步骤,更新字段列表里增加要插入值的字段opr_date,对应赋值为前面“获取系统信息”步骤”中定义的变量oprdate。这样就行了:

  • 相关阅读:
    [ html canvas getImageData Object.data.length ] canvas绘图属性 getImageData Object.data.length 属性讲解
    [ html canvas 模仿支付宝刮刮卡效果 ] canvas绘图属性 模仿支付宝刮刮卡效果实例演示
    [ javascript html Dom image 对象事件加载方式 ] 对象事件加载方式
    [ javascript New Image() ] New Image() 对象讲解
    Django安装及环境配置
    python使用opencv实现人脸识别系统
    redis 操作常用命令
    关于Python获取SQLSERVER数据库中文显示乱码问题
    Topshelf创建windows服务初探
    Js获取ip地址
  • 原文地址:https://www.cnblogs.com/coldlight/p/14085915.html
Copyright © 2020-2023  润新知