1.数据仓库中获取数据变化的历史拉链 - elliswang2018/datawarehouse GitHub Wiki
1.背景:
在数据仓库支撑业务分析的时候,有一个常见的需求,离线环境需要捕获生产环境中数据的变化过程,即需要记录生产环境中数据的快照,频次为每天、每小时。例如客户信息表,用户的手机号码会经常变更,此时生产环境中只会记录用户最后变更的记录,但是业务分析人员需要查看用户的手机号码变更过程。因此需要开发历史拉链模块,以期实时的捕获生产数据历史的变化,现在以spark计算引擎为基础,开发一个历史拉链捕获模块。
2.说明:
本技术的由两大模块组成,首先进行差异数据获取,然后再进行差异数据的历史拉链处理。
生产数据集A是需要进行历史拉链的数据,离线数据A是生产数据的一个备份,即是前一天的生产数据集A(T+1),两个环境的数据结构一致。
第一步:获取差异化数据。首先离线数据A进行初始化,即添加start_time和end_time两个字段,其中start_time初始化为系统当前的时间戳。其次,生产数据A对离线数据A求差集,如何差集为空,那么流程结束。若差集不为空,那么求得差异数据与离线数据的交集,离线剩余数据集,以及差异数据集,这三部分数据集。
第二步:历史拉链处理。第一步形成的差异数据集,对其进行初始化操作,即添加start_time和end_time两个字段,其中start_time初始化为系统当前的时间戳;第一步形成的差异数据与离线数据的交集,假如生产数据集A中存在modfy_time(即记录的更新的时间的字段),那么更新该数据集中end_time为对应差异数据集中start_time,否则直接更新该数据集中的 end_time为系统当前的时间戳;第一步形成的离线剩余数据集直接保留下来。
最后合并这三部分数据,得到最终离线历史拉链数据A。