ETL核对
ETL:本身就是缩写,全称是 Extract, Transform, Load(抽取、转换、加载)。ETL核对指的是在ETL(抽取、转换、加载)过程的前、中、后各个阶段,对数据的准确性、完整性和一致性进行检查与验证的一系列活动。
它的核心目的不是简单地搬运数据,而是确保搬运过程中的数据是正确、可信的。
ETL核对的三个主要阶段
1. 抽取后的核对 - 确保“拿对了、拿全了”
在从源系统(如业务数据库、日志文件)抽取数据后立即进行。主要回答:“我拿到的原始数据是否完整和准确?”
- 数据量核对:今天抽取的记录总数,与源系统同期记录数是否一致?环比、同比是否在合理波动范围内?
 - 字段非空核对:关键业务ID(如
order_id,user_id)是否存在空值? - 唯一性核对:关键业务ID是否有重复?例如,同一个
bill_no不应该出现两次。 - 值域核对:字段值是否在预期范围内?例如,“状态”字段是否只包含已知的
"COLLECTING","CLOSED"等。 
2. 转换中的核对 - 确保“洗对了、算对了”
在数据清洗、业务规则计算过程中进行。这是最复杂、业务逻辑最密集的核对阶段。主要回答:“我的转换逻辑是否正确应用了?”
- 业务逻辑核对:您提供的SQL就是这个阶段的典型例子!
- 业务逻辑:一个案件如果状态是“催收中”且逾期本金大于0,那么它对应的账单应该是有未还金额的(即 
charge_on_amount - charge_off_amount > 0)。 - 核对逻辑:找出那些违反这个业务逻辑的数据(即 
charge_on_amount - charge_off_amount = 0)。 - 目的:发现系统间的数据不一致(催收系统状态未及时更新)或数据错误。
 
 - 业务逻辑:一个案件如果状态是“催收中”且逾期本金大于0,那么它对应的账单应该是有未还金额的(即 
 - 数据映射核对:代码转换是否正确?例如,把源系统中的
1/0正确映射为"是"/"否"。 - 数据关联核对:表连接(JOIN)后,是否有数据丢失或异常增多?例如,左连接
bill_item和collection_case_item_detail后,发现大量bill_item记录没有匹配到案件,这可能意味着数据关联关系有问题。 
3. 加载前的核对 - 确保“能装进去、装进去后是对的”
在将数据加载到目标数仓表之前进行。主要回答:“加载后的数据是否符合目标要求?”
- 主键/唯一键冲突核对:准备加载的数据,其主键是否在目标表中已存在?(这取决于你的加载策略是覆盖、更新还是追加)。
 - 目标表约束核对:数据是否符合目标表的
NOT NULL、CHECK等约束条件。 - 数据一致性核对:核对跨表、跨系统的关键指标是否一致。例如,从订单系统汇总的总销售额,是否与财务系统记录的总收入大致吻合(考虑时间差等因素)。
 
ETL核对的常见方法与产出物
- 统计值比对:比较源表和目标表的记录数、某字段的SUM、AVG、MAX、MIN等统计值。
 - 抽样比对:对关键数据表进行记录级别的抽样,人工或通过脚本验证数据是否正确。
 - 稽核平台/工具:大型公司会建设专门的数据稽核平台,将上述核对逻辑配置化、任务化,定期运行并生成数据质量报告。
 
产出物通常是数据质量报告:
ETL任务: bill_item_daily
执行时间: 2023-10-27 02:00:00
- 抽取阶段: 通过。记录数 1,000,052 条,与源系统一致。
- 转换阶段: **警告**。发现 125 条异常记录,违反“催收中案件应有未还金额”规则。
- 加载阶段: 通过。成功加载 999,927 条记录(125条异常记录已隔离至异常表)。
