缓慢变化维之拉链表

场景:

业务库中的订单表中的某些维度随着时间的推移会慢慢变化,如果对于每次变化都是对原有数据的覆盖,则无法看到历史信息

对于这种情况,可以使用拉链表来解决。

相比于每天全量的导出业务数据到hive中存备份,使用拉链表的好处就是减少大量的冗余数据,并且也可以达到查看历史信息。

实现:

缓慢变化维之拉链表

 第一次从业务库中导入全量数据到hive中作为初始化的拉链表A,且增加两个字段:有效时间起(start_time)和有效时间止(end_time),初始化都是9999-12-31,标志数据的有效时间,方便后期回溯到任何一天的历史数据,查询某一天(n_time)的数据:
start_time <= n_time >= end_time;

以后每天导入修改的数据到hive的一张增量表B中,将今天的增量表与上一天的拉链表合并成新的拉链表。

示例:

2号拉链表(A)
1,ae,2020-08-25,2020-08-31
1,aa,2020-09-01,9999-12-31
2,bb,2020-09-01,2020-09-01
2,ba,2020-09-02,9999-12-31

3号增量(B)
1,ab
3,cc

生成结果:
3号拉链:
1,ae,2020-08-25,2020-08-31
1,aa,2020-09-01,2020-09-02
1,ab,2020-09-03,9999-12-31
2,bb,2020-09-01,2020-09-01
2,ba,2020-09-02,9999-12-31
3,cc,2020-09-03,9999-12-31

实现SQL

(A LEFT JOIN B) UNINO ALL B