zoukankan      html  css  js  c++  java
  • KETTLE4个工作中有用的复杂实例--1、数据定时自动(自动抽取)同步作业

    今天呕心沥血花了8个小时给大家带来kettle工作中最常见的四种复杂实例,90%的项目用到这4种实例都可以解决。

    4种实例种还有2种通用kettle工具,使用这两种通用工具实例,可以直接修改相应的配置文件,完成数据的同步。

    下面就一一给大家带来这4种实例,完全原创且可以拿来直接使用,废话不说,下面直接给大家带来具体实例:

    KETTLE4个工作中有用的复杂实例--1、数据定时自动(自动抽取)同步作业

    一、表数据自动同步

    1、为了给大家更直观的展示,【大喇叭玩转数据库】首先在数据库创建4张表,表结构如下:

    • t_student_kettle 学生数据源表;
    • t_student_kettle_target 学生目标数据表;
    • t_class 班级数据源表;
    • t_class_target 班级 班级目标数据表;
    • t_tbrz 同步日志表
    --1、学生数据源表
    -- Create table
    create table T_STUDENT_KETTLE
    (
      id     INTEGER,
      name   VARCHAR2(2000),
      sex    VARCHAR2(2000),
      age    INTEGER,
      cjsj   DATE,
      zhgxsj DATE default sysdate
    )
    tablespace MYSPACE
      pctfree 10
      initrans 1
      maxtrans 255
      storage
      (
        initial 64K
        next 1M
        minextents 1
        maxextents unlimited
      );
    
    --学生目标数据表
    -- Create table
    create table T_STUDENT_KETTLE_TARGET
    (
      id     INTEGER,
      name   VARCHAR2(2000),
      sex    VARCHAR2(2000),
      age    INTEGER,
      cjsj   DATE,
      zhgxsj DATE default sysdate
    )
    tablespace MYSPACE
      pctfree 10
      initrans 1
      maxtrans 255
      storage
      (
        initial 64K
        next 1M
        minextents 1
        maxextents unlimited
      );
    
    --班级数据源表
    -- Create table
    create table T_CLASS
    (
      id     NUMBER,
      class  VARCHAR2(100),
      cjsj   DATE,
      zhgxsj DATE
    )
    tablespace MYSPACE
      pctfree 10
      initrans 1
      maxtrans 255
      storage
      (
        initial 64K
        next 1M
        minextents 1
        maxextents unlimited
      );
    
    --班级目标数据表
    -- Create table
    create table T_CLASS_TARGET
    (
      id     NUMBER,
      class  VARCHAR2(100),
      cjsj   DATE,
      zhgxsj DATE
    )
    tablespace MYSPACE
      pctfree 10
      initrans 1
      maxtrans 255
      storage
      (
        initial 64K
        next 1M
        minextents 1
        maxextents unlimited
      );

    -- 同步日志表
    -- Create table
    create table T_TBRZ
    (
      id     NUMBER, --id
      tbcgsj DATE, --同步成功时间(结束时间)
      tbkssj DATE, --同步开始时间
      bm     VARCHAR2(100), --同步表名
      tbjg   CHAR(1) --同步结果:1-成功;2-未成功
    )
    tablespace MYSPACE
      pctfree 10
      initrans 1
      maxtrans 255
      storage
      (
        initial 64K
        next 1M
        minextents 1
        maxextents unlimited
      );

    --创建同步日志表的序列
    create sequence SEQ_T_TBRZ
    minvalue 1
    maxvalue 999999999
    start with 81
    increment by 1
    cache 20;

    2、配置数据库连接地址,一般项目上会通过配置jndi数据源直接连接数据库,不在配置jdbc数据源了,有点类似于java的配置

     3、设置数据库连接,通过JNDI方式

     4、作业整体流程

     需要用到1个作业和6个转换来操作2张表,一个表是3个转换来完成,几张表总共的转换就是N*3个转换。

     下图为整个作业的流程:

    由上面流程图可以看到,start分了两个分支,一个是class表,一个是student表,下面我们来一一点开每个转换看下。

    1)T_CLASS数据变量设置

     如上图,T_CLASS数据变量设置,该步骤是获取上次同步的成功时间,做为下次同步的开始时间,并设置到环境变量中,供后续的数据流调用

    2)T_CLASS数据变量设置

     如上图,T_CLASS数据更新步骤,该步骤是获取上次同步的成功时间之后的数据,插入更新到表中。

    3)T_CLASS保存同步日志

      如上图,T_CLASS保存同步日志,该步骤是保存本次同步的同步成功时间,插入到同步日志表中,为下次同步的开始时间做准备,具体sql如下

     1 INSERT INTO T_TBRZ
     2   (ID, KSSJ, TBCGSJ, BM, TBJG)
     3 VALUES
     4   (seq_t_tbrz.NEXTVAL,
     5    TO_DATE(SUBSTR('${V_SCTBCGSJ}', 0, 19), 'YYYY-MM-DD HH24:MI:SS'),
     6    SYSDATE,
     7    'T_CLASS',
     8    '同步成功',
     9    '1');
    10 DELETE FROM T_TBRZ
    11  WHERE TBJG = '1'
    12    AND BM = 'T_CLASS'
    13    AND ID IN (SELECT ID
    14                 FROM (SELECT ID, ROWNUM RN
    15                         FROM (SELECT ID
    16                                 FROM T_TBRZ
    17                                WHERE TBJG = '1'
    18                                  AND BM = 'T_CLASS'
    19                                ORDER BY ID DESC))
    20                WHERE RN > 2);
    21 COMMIT;
    View Code

    3)T_CLASS同步成功

       如上图,T_CLASS同步步骤成功后,写入该成功步骤,提示成功。

     5、T_STUDENT_KETTLE表的数据同步工作,如同T_CLASS表一样,存在3个转换步骤

     5、运行转换,双击start,设置作业定时调度,设置完成后,运行转换

    6、运行结果,运行成功和运行失败有不同的结果展示,可以根据此结果进行错误排除

     注意:因某些限制,最新源代码和后续通用配置实现数据抽取 已放置在笔者公众号上,请关注微信公众号: 大喇叭学数据库, 回复关键字:【实例】,获取kettle安装程序和运行实例(表结构和kjb、ktr文件)


    ------------恢复内容结束------------

  • 相关阅读:
    selenium-元素无法定位解决办法
    OpenResty 最佳实践
    openresty 学习笔记小结:综合应用实例
    openresty 学习笔记六:使用session库
    openresty 学习笔记番外篇:python的一些扩展库
    openresty 学习笔记番外篇:python访问RabbitMQ消息队列
    openresty 学习笔记五:访问RabbitMQ消息队列
    openresty 学习笔记四:连接mysql和进行相关操作
    openresty 学习笔记三:连接redis和进行相关操作
    Grunt教程——初涉Grunt
  • 原文地址:https://www.cnblogs.com/dalaba/p/12111173.html
Copyright © 2011-2022 走看看