Preppin' Data 每周一挑战 如何去掉重复的手动日志记录2019-12
挑战
https://preppindata.blogspot.com/2019/05/2019-week-12-solution.html
简介:
生产环境的服务器有时会停机,服务器会自动把停机情况记录进日志,同时工作人员也会手动记录服务器的停机情况,因此有2个表格。
- 1,自动记录表:非常精确,但不一定100%记录停机情况,可能有遗漏。
- 2,手动记录表:时间不精确,只是作为一个辅助手段,部分停机情况肯定没有记录。
任务:对停机情况进行分析。包括停机时长,停机的原因。
方法:
- 要把这2个表合并,并去掉重复的手动记录。
- 然后分析。
难点问题:如何去掉手动表中的重复记录?
⚠️因为自动记录时间非常精确,所以没法直接用 手动时间=自动时间,的方法进行🔗。
上图,黄色框中的手动记录和自动记录的时间轴有重叠,表示他们时相同的记录。因此要去重。
上图,我们合并表要的手动记录是:红色箭头所指的时间记录。
只能使用排除法(手动表right outer join自动表 on 条件)
首先:找到手动记录中start_time不在自动记录时间轴内的记录。共x条记录。
然后,从x条记录中,找到end_time不在自动记录时间轴内的记录,剩余x2条记录。
然后,从x2条记录,剔除起->终时间轴包含了一条/多条自动记录时间轴的记录,剩余的x3条记录,即我们想要的记录。
最后, 把x3条记录和自动表中的记录合并,就是最终的分析表。
⚠️陷阱:
不能直接使用起和终时间 < 自动记录表的起和终时间的方法。
因为表连接是每条数据逐一和另一个表的所有数据使用条件判断来确认是否连接。
而时间是一条轴。一条手动记录A,是时间轴上的一段时间,必然会小于后面的时间轴上的自动记录的时间。