zoukankan      html  css  js  c++  java
  • 数据的全量与增量

    数据有很多种下发方式:

    简单的来说分为增量和全量。

    全量获取

    当表是一个全量分区表

    一般数据下发的来源表是一个分区表,全量就是一次下发一个分区。

    当表是一个增量分区表

    一次性下发全表

    当表是一个拉链表

    获取每个客户的最新状态全量下发。(伪代码如下)
    select 字段
    (  
    select 字段 ,over (partition by id order by batch_date1 desc) as cnn from table_Z where batch_date ='xxxxxxxx'
    ) a where cnn =1;

    增量获取:

    但是往往非大数据系统无法一口气吃掉千万级别的数据量。

    一般会采取增量下发的方式。

    当表是一个增量分区表

    只需要下发一个分区

    当表是一个全量分区表

    需要对今天的分区数据和昨天分区数据的数据进行比对,然后寻找新增,差异,和删除三部分。然后下发

    伪代码:

    新增和差异: 需要约定好增改标识

    select 字段,增改标识
    (select 字段 from table_F where batch_date=今天) t0
    left join
    (select 字段 from table_F where batch_date=昨天) t1
    on t0.id=t1.id
    where (t0.字段1<>nvl(t1.字段1,'not exist'or 
    t0.字段2<>nvl(t1.字段2,'not exist').....);

     删除:需要约定好 删除标识

    select 字段 ,删除标识
    fromselect 字段 from table_F where bacth_date ='昨天') t0
     left join
     (select 字段 from table_F where bacth_date ='今天') t1
    on t0.id =t1.id
    where t1 is null;

    不过也可以用outer 的方式实现:

    当表是一个全量拉链表

    select 字段 from table_Z where batch_date='今天' and stat_date='今天' 
  • 相关阅读:
    PHP 日期的时区差异
    c++与c输出输入语句时空区别
    数据库中完整性约束的SQL定义几点小解
    字符的一字节8位问题
    C#抽象类
    SQL server 中SUBSTRING()以及CONVERT()的用法
    关于CS模式下,控制一个容器内控件的值问题
    新的公司新的感受
    小生谈字符串的截取函数SubString()仅限csharp语言
    LINQ中怎么使用NEWID()之自我学习与理解
  • 原文地址:https://www.cnblogs.com/wqbin/p/11270190.html
Copyright © 2011-2022 走看看