数仓建模:不同类型表及同步策略

日全量表 & 增量表 & 快照表 & 切片表 & 流水表 & 拉链表

日全量表

日全量表概念

  • 全量表存放的,是每天的所有的最新状态的数据;
  • 全量表无论有无变化都要上报;
    • 每次上报的数据都是所有的数据(变化的 + 没有变化的);
  • 全量表只有一个分区或者没有分区;
  • 每次往全量表里面写数据都会覆盖之前的数据,因此全量表不能记录数据的历史变化,只能截止到当前最新、全量的数据。
  • 全量表一般用作维度表,比如:用户,商品,商家,销售员等

全量表表同步策略

  • 有变化数据
    • 由于数据量比较小,通常可以做每日全量,就是每天存一份完整数据,即每日全量。
  • 无变化数据
    • 针对没变化的客观世界的维度(比如性别,地区,民族,政治成分,鞋子尺码),可以只存一份固定值。

增量表

增量表概念

  • 如果一张表只含有某个更新周期内的数据,那就叫增量表。
  • 每天新增的数据和改变的数据,都会存储在当日的分区中;
  • 增量表记录每次增加或变化的数据,只报变化量、无变化的不用报;
  • 一般增量表只保存 7 天的数量;
  • 增量表设计过程,假设以18号与19号数据为例;

增量表同步策略

  • 增量更新指的是,从上次的更新截止点开始,抽取这次新增加的数据,放在目标表里,这就是增量更新。
  • 增量更新的时候,我们需要注意增量字段,还得小心更新失败、漏更新等,需要进行数据更新的校核。优点是数据处理量小,速度快;缺点是需要注意的事情比较多。

快照表

快照表概念

  • 每天的数据,都是截止到当天的全量数据;
  • 因为全量表无法反映历史的变化,而快照表记录截止数据日期的全量数据(每个分区都是记录截止当前分区日期的全量数据);
  • 但是在数据量大的情况下,每个分区存储的都是全量数据,数据冗余和浪费存储空间;

全量表 vs 增量表 vs 快照表

拉链表

拉链表概念

  • 拉链表不是 SCD,它只是用来处理缓慢变化维的一种手段而已。
  • 将分析的角度存放在维度表中,但维度表里的数据可能发生一些变化,尽管可能跨越很久,例如用户信息表;
  • 能够解决快照表数据冗余问题,还能维护数据历史状态和最新状态,记录截止数据日期的全量数据,一个事物从开始,一直到当前状态的所有变化信息;
  • 拉链表含义
    • 记录一个事物从开始,一直到当前状态的所有变化的信息;
    • 拉链表每次上报的都是历史记录的最终状态,是记录在当前时刻的历史总量;
    • 当前记录存的是当前时间之前的所有历史记录的最后变化量(总量);
    • 存量是在某一时刻的总量;
    • 存量一般设计成拉链表(月报-常用、日报);
    • 流量和存量的区别:流量是增量;存量是总量;
    • 封链时间可以是 9999 等等比较大的年份;
    • 拉链表到期数据要报0;
    • 拉链表和增量表的共同点:表结构基本一样;
    • 在有些情况下,为了保持历史的一些状态、需要用拉链表来做,这样做目的在可以保留所有状态的情况下可以节省空间。
  • 拉链表适用于以下几种情况吧
    • 数据量大;
    • 表中某些字段有变化,但变化的频率也不是很高;
    • 业务需求需要统计这种变化状态;
    • 每天全量一份数据不太现实,不仅浪费了存储空间,有时可能业务统计也会麻烦;

拉链表概念同步策略

  • 拉链表,可以采用增量更新的方式进行同步;

流水表

流水表概念

  • 流水表,对于表中的每一个修改都会记录,可以用于反映实际记录的变更;
  • 比如:交易流水,操作日志,出库入库记录等。

流水表同步策略

  • 同步更新数据
    • 因为数据不会变化,而且数据量巨大,所以每天只同步更新数据即可;
  • 每日一个分区
    • 可以做成每日增量表,即每日创建一个分区存储。
  • 区别于拉链表:
    • 拉链表通常是对账户信息的历史变动进行处理保留的结果,流水表是每天的交易形成的历史;
    • 流水表用于统计业务相关情况,拉链表用于统计账户及客户的情况