前言:
随着数字化的深入,各种系统及烟囱的建立,各系统之间的架构和数据存储方式不同,导致做数据仓库或数据湖时发现,因自建的系统或者非标准化的系统经常存在物理删除而不是软删除。这就延伸出一个问题,经常导致数仓里面的数据多余目标库的。导致做数据分析或者消息推送时,出现了很多“垃圾数据”。那我们怎么有效的去识别数仓和目标库的数据情况呢,今天我们介绍用kettle来标记不同库之间的数据对比。
一、数据对比
①出发点:
-
数据准确性验证:
- 数仓中的数据通常来源于多个源库,通过数据对比可以验证数仓中的数据是否准确反映了源库中的原始数据,从而确保数据分析和决策的准确性。
-
数据完整性检查:
- 数据对比有助于发现数仓中是否存在数据缺失或异常,确保数据的完整性。这对于数据分析和挖掘至关重要,因为不完整的数据可能导致错误的结论。
-
数据一致性维护:
- 在不同的业务系统或数据源之间,数据可能存在差异。通过数据对比,可以发现并解决这些差异,确保数仓中的数据在不同场景下保持一致。
-
数据质量提升:
- 数据对比是数据质量管理的重要环节。通过对比,可以发现数据质量问题(如错误、重复、缺失等),并采取相应的措施进行修正和改进。
② 常用方法
-
行数对比:
- 对比源库和数仓中相同表的行数,以检查是否存在数据丢失或重复。这可以通过SQL语句中的
SELECT COUNT
函数来实现。
- 对比源库和数仓中相同表的行数,以检查是否存在数据丢失或重复。这可以通过SQL语句中的
-
内容对比:
- 对比源库和数仓中相同表的数据内容,确保数据的准确性和一致性。这可以通过逐行比对数据或使用特定的数据对比工具来完成。
-
维度交叉对比:
- 在多维度的数据场景下,可以通过交叉对比不同维度下的数据汇总结果,以检查数据的一致性和准确性。例如,对比不同时间段、不同区域或不同产品线的数据汇总结果。
-
实时对比与离线对比:
- 根据业务需求,可以选择实时对比或离线对比。实时对比适用于对数据实时性要求较高的场景,而离线对比则适用于对数据实时性要求不高的场景。在实时对比中,可以使用数据流处理技术来实时同步和对比数据;在离线对比中,则可以使用批处理技术来定期同步和对比数据。
-
DQC校验:
- DQC(Data Quality Check)校验是一种常用的数据质量检查方法。通过预设的检查规则和算法,对数据进行唯一性验证、最大/最小值验证等,以确保数据的准确性和合规性。
二、实际案例
本次我们以OA系统中,我们常见的我们发起的流程,还没走完,然后被退回或者异常终止,然后被发起人删除的场景,刚开始我以为只是状态的改变,后面经过仔细分析,确实OA系统存在物理删除的操作,这导致我们进行OA流程分析的时候,推送提醒了很多异常的数据。比如这样,这样。
因为频繁的出现,导致我不得不找OA负责人去分析原因,通过在OA系统里面查询对比,真的是被物理删除了,因此想到的解决方案就是通过新旧数据对比来标记数仓里面被删除的OA流程,然后进行过滤,来保证数据的一致性。
三、实现思路
为了对比对应的数据,因此我们需要去定义比较数据的范围时,对比的主键(指标)。在本次数据对比中,我们通过对比近3个月的数据及通过ID作为主键进行对比,具体作业如下图所示。
如上图所示,我们更新数据源近90天数据,作为新数据,用存储在数仓里面的对应的表做旧数据。然后通过主键进行对比就能发现新旧数据的修改情况。
这里需要注意的是旧数据的比较范围要相对小点,即新数据更新的是近90天的数据,旧数据应该是89天的,这样就能有效避免误判的情况。
然后我们通过主键排序和合并记录的功能,将数据对比的结果输出到一个对比结果表里面,然后我们再通过一个更新程序去更新对应目标表的数据即可。具体更新程序如下图所示。