数仓开发拉链表
1.拉链表介绍
假如有一个业务数据表user_info,里面记录了用户的基本信息,主键、姓名、年龄、性别、地址、电话、数据更新日期。
由于用户可能会修改个人信息,为了更好地记录、溯源,所以建立了拉链表来对所有的历史修改的数据进行记录。主要就是对每条数据增加了数据的有效期区间bdate和edate,就是说这条数据在哪个时间中是有效的。9999/12/31类似就代表这条数据是最新的,因为它的失效日期在9999年。
拉链表主要就是每天取出新增和修改的数据,进行开链和闭链的操作。
2.首次全量同步数据
第一次往拉链表中插入数据时,是全量插入。
insert into user_info_lalian(
pkid
,name
,age
,gender
,address
,tel
,updatetime
,bdate --数据产生时间(有效开始时间)
,edate --数据失效时间
)
select
pkid
,name
,age
,gender
,address
,tel
,updatetime
,trunc(updatetime) as bdate --数据产生时间(有效开始时间)
,date'9999-12-31' as edate --数据失效时间
from user_info;
3.处理每天新产生的数据
拉链表每天都需要处理数据,user_info表中updatetime就是新产生的标志。比如今天是2022年2月1日,user_info中updatetime有2022年2月1日的数据,那么就表示今天有新产生的数据。
(1)新产生的数据主要分为2种:
完全新增的数据: 例如有个新用户小王在2022年2月1日首次注册了app。
信息发生变更的数据: 例如上个月注册的用户小李在2022年2月1日,修改了自己的手机号。