• ETL增量处理总结


    1 LOG表

    1.1 思路

    用log表记录业务库某表yw_tableA发生变化数据的主键。数据进入BI库目标表bi_tableA前,先根据log表记录的主键进行delete。

    1.2 设计

     
    1.2.1 log表结构
    CREATE TABLE  LOG
    (
      key_1 VARCHAR(20),  --主键1
      key_2 VARCHAR(20),  --主键2
      tName VARCHAR(20),  --来源表
      updateDate DATE,  --更新日期
      loadDate DATE  --加载日期
    );
     
     
    1.2.2 etl流程
    • yw_tableA中发生变化的数据,主键存入log,所有列存入BI库临时表tmp_bi_tableA(图1);
    • 根据log表,删除BI库bi_tableA中已存在数据(图2);
    • tmp_bi_tableA数据进入bi_tableA(图2)。

    image

    图1 业务数据进入日志和临时表

    image

    图2 目标表初始化以及临时表数据进入目标

    1.2.3 附部分sql
    --目标表初始化
    delete from bi_tableA tg where exists (select 1 from tmp_bi_tableA tmp where tg.key1 = tmp.key1)

     

    2 左关联(键比对、全表比对)

    2.1 思路

    业务库某表yw_tableA左关联BI库bi_tableA,可以关联上的舍弃;关联不上的进入目标表bi_tableA,然后对同一个业务主键多条进行处理(打上标记或delete)。比较适合小维表更新。

    2.2 设计

    2.2.1 目标表结构
    create tabel bi_tableA
    (
      physical_key int identity,  --物理键,自增
      logical_key varchar(20),   --业务键
      col1 varchar(20),  --其他列
      nowstate char(1),  --状态
      loadDate DATE  --加载日期
    )
     
    2.2.2 etl流程
    • yw_tableA与bi_tableA主键或多列比对,得出需要进入目标表的记录,进入目标表bi_tableA;
    • 目标表bi_tableA数据处理,删除或状态位。

    image

    图3 关联设计

    2.2.3 附部分sql
    --目标表状态更新(同一业务键记录保留最新)
    update bi_tableA set nowstate='0' where physical_key not in (select max(physical_key) from bi_tableA group by logical_key having count(physical_key) > 1 and nowstate='1' )
  • 相关阅读:
    java1.8时间比较应用
    Window配置网络设定IPv4的固定IP自动被修改为169.254.*.*的问题
    osgi内嵌jetty容器添加过滤器
    jackson依赖的jar包
    Tomcat下ajax请求路径总结
    JavaScript中一个字符串变量突然变成了false的问题解析
    Ajax请求发送的FormData是"[object object]"
    jQuery的$.extend方法使用
    JS 异常:Uncaught RangeError: Maximum call stack size exceeded解析
    Java的重写equals但不重写hashCode方法的影响
  • 原文地址:https://www.cnblogs.com/BlueBreeze/p/4244662.html
Copyright © 2020-2023  润新知