![3682289c24eb88eb485b50c25da30f68.png](https://i-blog.csdnimg.cn/blog_migrate/5db52d162100816bca0a0d0eea9d4ffa.jpeg)
一般而言,在总体数据量比较多,而每天真正变化的数据量并不是很多的情况下,才会选择做拉链存储。离线数仓开发中,如果数据每天变化或者频繁变化,但又想做成拉链的形式存储数据,这就需要视业务需要而定。就借据表而言,计提利息(应计利息)字段每天都是变化的,随着日期和余额的变动而变动,如果业务上不是很重要(业务中更关注实还利息),或者说通过其他方式依然能反映此字段的变化情况的话,则在判断是否拉链的时候,可去掉此字段的比对条件进行拉链操作。但是后续在依赖拉链表开发的过程中,就需注意计提利息字段相关指标造成的不利影响,如下:(1)计提利息字段:使用拉链表的数据,统计此字段是不对的;(2)其他关联字段:因发生利息还款导致的计提利息字段变化,其他字段均不变化的话,而这时候取当天拉链的增量数据加工出来的一些指标的值会偏小,比如说:本日回收利息。
针对上述第(2)点,最好不要使用拉链表的增量数据去加工指标,这样会产生较大的数据差异。可以结合两个角度取数,首先是业务需要的角度,比如:需要反映放款、结清和回款行为的数据。其次就是数据变化角度,只要借据发生放款、结清和回款动作时,更新字段会发生变化,在理想意义上借据从产生到结束,也无非这几个动作。在实际开发过程中,需要注意一些特殊情况:数据没有发生变化,但是update_time更新字段却真实变化,这种情况导致最终的增量数据集的数据量变大,虽然不影响指标值的统计;抽数过程中会多抽一点,把第二天凌晨的数据也抽进来了,如下图中的B、C和D的情况。若限制start_dt等于当天作为增量数据,虽然数据都能进来,但统计putout_date放款指标的时候,C记录在当天一定是统计不到,也不该被统计到的,但关键是在第二天也是大概率取不到且统计不到的。以上特殊情况表明,直接根据拉链表数据特征去取增量数据会导致某些指标值偏小。其实,如果结合业务含义,从全量数据中取增量数据会更加合理。从2020-09-20的全量数据中删选出putout_date=stat_dt,这样放款指标就都能计算到。
![65845ed9de4fcaa90d8c6c79ddd1f043.png](https://i-blog.csdnimg.cn/blog_migrate/cb59a77d6da610b61cafe982358665c7.jpeg)
此外,在开发拉链表之前,应该做好数据探测的工作,对空值字段、更新字段以及业务字段进行分析,再选择适当的方式进行拉链存储并做好后续的数据校验工作。例如:空值字段的排查,某条记录的某个字段初始化时就是null值,在比对数据时不对空值子段做处理,则会造成拉链存储感知不到此字段的变化,造成数据准确性问题等。