zoukankan      html  css  js  c++  java
  • 使用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。这样就行了:

  • 相关阅读:
    TBDR下msaa 在metal vulkan和ogles的解决方案
    Load store action in vulkan & ogles 的解决方案
    百度 我日你全家
    metal sample code
    NativeRenderingPlugin IOS
    ranch实现游戏服务器
    erlang游戏开发tcp
    Erlang 命令行监控工具
    rebar安装及创建项目
    erlang中如何调试程序
  • 原文地址:https://www.cnblogs.com/coldlight/p/14085915.html
Copyright © 2011-2022 走看看