针对不同的需求,对表的更新方式也不同,总结一些日常更新方式
下面的联合主键是指,业务表的维度key值是通过其他字段去维表获取的,key在维表属于记录缓慢变化的唯一key值
小数据量表
1->对于小数据量表,可以采用先Truncate表,然后Insert的方式更新数据
实现场景:需要和来源表数据完全保持一致
优点:实现简单
缺点:不会存储历史数据,和来源表完全一致
2->对于需要存储缓慢变化的,可以参考如下文章实现,https://ask.hellobi.com/blog/Zeehom/3156
原理是拉链表的思路,通过目标表的来源sql生成的数据和目标表对比
实现场景:需要存储数据缓慢变化
优点:会存储历史数据,采用拉链表思路解决问题,可以记录数据的变化过程
缺点:实现麻烦
大数据量表
1->增量更新,对昨天和历史修改数据更新
实现场景:目标表不记录历史数据删除,只记录历史数据变化,联合主键都是从来源stage生成的或者不会发生变动
优点:实现简单,更新效率高
缺点:联合主键不能关联其他Stage生成,不然,如果联合主键发生变化,无法对历史变化数据更新(只会插入)
2->假增量更新,也叫回算历史数据,先删除回算时间(一般是业务时间)范围内的数据,然后再插入
实现场景:历史数据,可能会删除,修改,需要目标表保持同步,对业务表记录历史数据要求不高
优点:可以回算到历史数据的修改删除动作
缺点:这个记录只能记录回算时间范围内的业务数据变化;
如果目标表有联合主键key从其他Stage来,那么回算时间范围内的联合主键都会刷新成最新key值