为了确保改造前后的数据一致性,我们需要进行全面的数据验证。
此外,参考已有的全量数据,对合并后的全量数据进行一致性对比。预期结果为:改造后,同一时间分区,开发环境与生产环境的数据一致。
在进行数据探查时,我们发现某个月底的全量数据存在异常增长的情况。经过深入调查,我们发现有两个导入任务同时对该表进行了插入操作。之前数据符合预期的原因是其中一个任务是直接进行insert操作,而另一个任务是先进行truncate再insert。由于这两个任务的时间安排问题,导致月底当天其中一个任务执行时间晚于另一个任务,从而造成了数据激增的情况。
为了解决这个问题,我们将其中一个任务改造为增量导入任务,并设置了相应的依赖关系。这样可以确保数据的正确性和一致性。
另外,在进行创建增量di表时,客户反馈其他任务的上游字段有变更,造成数据错位,需要重新刷数。这提醒我需要仔细检查字段的对应关系,不出所料新的di任务也存在类似的问题,我及时进行相应的调整和修正。
在执行合并任务时,发现生产与开发环境在10月3日的数据仅相差了1条,由于实际结果与预期结果不一致,我与同事进行了CR讨论和分析。但同事认为我的合并逻辑有误,所以要求我修改后,再进行重新跑数,不然会存在数据不一致性问题。尤其是存量数据被删除时,经过仔细排查后最终找到了原因。得出结论如下:
1、客户说xx全量表不会有删除数据的操作,实际全量更新时,业务源系统会有物理删除数据的情况。客户之前说明的信息有误,实际需要按业务口径为准,于是三方开会讨论并得出该问题的结论,允许该情况发生,每月月底进行全量覆盖,防止数据不一致情况出现周期过长;
2、我的合并逻辑实现方法并无错误,全量改增量的功能无需修改;
方法A | 方法B |
---|---|
select case when b.uid is not null then b.uid else a.uid end as uid,case when b.uid is not null then b.uname else a.uname end as uname,case when b.uid is not null then b.optime else a.optime end as optimefrom dw_user_inc a full outer join ods_user_inc bon a.uid = b.uid | SELECT NVL(b.uid,a.uid) AS uid ,NVL(di.uname,df.uname) AS uname ,NVL(di.optime,df.optime) AS optimefrom dw_user_inc a full outer join ods_user_inc bon a.uid = b.uid |
这两个SQL语句的结果是相同的。因为NVL函数和CASE WHEN语句都是用来处理NULL值的,只是写法不同。这两个函数的作用是相似的,都可以在某个值不存在时返回另一个值。
3、遗漏的数据的更新时间为10月4日的凌晨0点2分,以修改时间作为增量字段,取的应该为10月3日当天的增量数据,10月4日不在该范围内;
在进行数据一致性验证时,我们需要注意时间的准确性。如果发现生产环境和开发环境的数据存在差异,我们需要仔细排查并找到原因。在这个过程中,我们需要了解数据的来源、处理过程和结果输出等各个环节。只有确保每个环节的正确性才能保证最终数据的准确性和一致性。
此外,我们还应该注意保护客户的数据安全。在排查问题时,我们应该避免将敏感字段如姓名、手机号等未经加密就展示出来。对于这些敏感字段,我们应该进行脱敏处理后再进行展示。这样可以保护客户的隐私和数据安全。
本文分享自 rainbowzhou的成长足迹 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!