ETL之拉链表算法探索

拉链表:记录数据在 某一时间区间内 的状态 以及数据在 某一时间点 的变化的数据存储表。

历史数据存储方式

数仓中历史数据存储的2种方式:

  • 快照存储
快照式存储
  • 拉链存储
拉链表存储

可以很明显的看出:在数仓中,相比于快照存储,拉链表,既能满足反应数据的历史状态,又可以最大程度的节省存储。

拉链表操作

  • 数据新增
数据新增:即主键新增,直接开链。(主键:账户ID)
  • 数据删除
数据删除:直接关链。(主键:账户ID)
  • 数据修改
数据修改:即属性字段的更新,先关链,再开链。(主键:账户ID)

算法详解

  • 目标
数据设计目标
  • 1. 得到当日全量数据

我们先采集当日(假如今天为2014-01-04)的业务全量数据(SRC表)存储到 VT_NEW 表中。


第一步
  • 2. 得到增量数据
第二步

注意,TAG表此时的数据为 昨日(2014-01-03)的全量数据,我们从有效的数据(开链数据)当中找出变更数据,即 VT_NEW 表和 TAG表进行比较,保存到 VT_INC表中。(注: 百度上为 ND-OD 那个步骤)

  • 3. 修改目标表进行关链更新操作
第三步

注意,此步骤是对有变动的、开链的历史数据做关链处理。(注: 百度上说的比较啰嗦)

  • 4. 修改目标表进行开链插入操作
image.png

注意:在此步骤当中,因为我们的VT_INC已经是开链的增量数据,所以可以直接把VT_INC表数据全部插入到TAG表即可。最后TAG表就是我们需要的目标表。

取数据

我们进行数据分析时,直接进行日期维度的选择即可,例如取2014-01-04日的数据:
sql select * from TAG where satrt_dt >= '2014-01-04' and end_dt < ''2014-01-04;

取数据

你可能感兴趣的:(ETL之拉链表算法探索)