29
2023-10
踩坑经验 | 如何快速反查数据问题
相比于写数据逻辑,我实际用在查逻辑问题上的时间会更多一些~今天来分享一些反查数据问题的经验/方法论。
二分法定位问题大致范围
二分法是一个非常经典的解决问题方法了。根据我的实操经验来说,相比一层层逻辑向前反查,远不如二分法的效率高。
用学术一点的话来表达二分法,是这样的:
当我们需要在一个有序列表或数组中查找特定元素时,二分法是一种高效的算法。它通过将列表或数组分成两半,并根据目标元素与中间元素的大小关系来确定目标元素在哪一半中,从而减少搜索范围。
二分法的步骤如下:
1.确定搜索区间的起始点和终止点;
2.计算中间点的索引;
3.检查中间点的值与目标值的关系;
4.如果中间点的值等于目标值,则找到了目标元素;
5.如果中间点的值大于目标值,则目标元素在前半部分(起始点到中间点的前一个位置);
6.如果中间点的值小于目标值,则目标元素在后半部分(中间点的后一个位置到终止点);
7.根据上一步的结果,更新搜索区间的起始点和终止点;
8.重复步骤2至4,直到找到目标元素或搜索区间为空。
然而这个方法其实挺简单的,就像猜数字大小的游戏,你报一个数,对方告诉你大了还是小了,你通过对方的反馈来猜到真实值的游戏。
在实际操作的过程中,第一步,先确定整体的数据流向:从A系统流转到B系统,再流转到C系统的这种流向逻辑。然后比对头尾两端的数据是否一致,如果一致就可以证明数据处理的流程是没有问题的,问题可能出在数据源头就是错误的。看完头尾之后,再从之间某个关键的地方作为节点进行排查,比如数仓的DWH层的数据,确认一下数据逻辑是出在了数仓的处理逻辑中还是看板的处理逻辑中。
注释法反查SQL异常
很多时候查数据的异常,都会查到某一段具体的SQL头上。尤其是一些逻辑复杂、上百行的SQL,单看SQL的逻辑读起来非常费劲。
定位问题的方法就是,把可能有问题的单点case写进where条件中,然后执行SQL,逐个地方注释掉复杂的逻辑,看看SQL在那一段逻辑中出现了异常。这种处理方式,在面对上百行的复杂SQL时,反查问题的效率是更高的。
特殊关照的人
每个团队总有那么几个拉跨的存在。在定位问题的时候,重点优先去看那几个拉跨的存在写的部分是不是有问题。
虽然说这种办法看起来有点针对某些同事,但是吧,这个方法有时候非常好用,效率非常高。