zoukankan      html  css  js  c++  java
  • OLAP ODS 项目总结 说说缓慢变化维

      如果不是OLAP 系统或者BI系统,我们在生产环境下常遇到这样的问题 需要同步两个表。比如交通驾驶人,每个月需要同步。

    表O_DRIVER_SOURCE 是来自第三方的源表,O_DRIVER_TARGET是本系统需要使用的目标表。现在需要同步这两个表很容易想到的

    解决方案是

      1.使用存储过程,有点复杂

      2. merge into 语句

      

    Merge into target O_DRIVER_TARGET
    
    Using O_DRIVER_SOURCE
    
    On ( O_DRIVER_SOURCE.driver_id=O_DRIVER_TARGET.driver_id)
    
    When matched then
    
    Update
    
    Set O_DRIVER_TARGET.info=O_DRIVER_SOURCE.info
    
    When not matched then
    
    Insert
    
    Values(O_DRIVER_SOURCE.driver_id,O_DRIVER_SOURCE.name,O_DRIVER_SOURCE.info);


             这是一个很简单的原型,但是有个问题,假设 源表删除的数据,需要在目标表中删除,这是个问题。

      现在如果更复杂些需要定时监控这些表的变化如何解决,基本的步骤如下

      1. 全表扫描源表。取出ID。

      2.将ID 在 目标表中对比。

          3.如果存在则更新目标表的字段。如果不存在在插入该表。

      如果使用的是ORACLE ,使用job + cdc 是一个更佳的解决方案。

         现在看看如果在ETL中,这种表如何处理,我们称之为缓慢变化维。

      现将在Informatic中如何运行的方式 贴一贴。

      1.SOURCE的定义 O_DRIVER_SOURCE

      2 SQOUCE QUALIFER :进行过滤

      3 EXPERESSION : 增加一列new_flag 记录最新的数据行

      4 LOOKUP组件查找目标表TARGET :look up 组件,查找数据

      5 ROUTER组件 : 做数据分发

      6 UPDATESTRAGE组件 :如果 new_flag 为0 ,则做更新,如果 new_flag 为1 则做插入,如果new_flag为-1 则删除

       7 目标表TARGET :O_DRIVER_TARGET

      

  • 相关阅读:
    BZOJ 2818: Gcd
    BZOJ 4816: [Sdoi2017]数字表格
    BZOJ 2301: [HAOI2011]Problem b
    BZOJ 2440: [中山市选2011]完全平方数
    BZOJ 2705: [SDOI2012]Longge的问题
    BZOJ 3992: [SDOI2015]序列统计
    BZOJ 3529: [Sdoi2014]数表
    AC日记——小A的糖果 洛谷七月月赛
    AC日记——「HNOI2017」礼物 LiBreOJ 2020
    AC日记——[Hnoi2017]影魔 bzoj 4826
  • 原文地址:https://www.cnblogs.com/jerryxing/p/2807557.html
Copyright © 2011-2022 走看看