源系统里能查到的数据,到了数据平台却数量不同、字段为空或状态不一致,这类问题很难只靠一条 SQL 判断原因。
最近参与某教育数据项目时,我接触到上报系统升级、标准表调整、数据采集和治理准确性核对等工作。截至 11 月底,项目记录仍有一类数据尚未提供,画像和整体工作也处于继续推进状态。这让我更明确地意识到:平台数据出现差异,不一定都是同步程序错误,也可能是源数据、统计范围、字段映射或任务时间窗口不同。
先确认比较的是不是同一批数据
开始排查前,最重要的是把比较范围写清楚:
- 比较的是哪个业务对象;
- 源系统和平台分别使用什么筛选条件;
- 时间范围是否一致;
- 是否包含已删除、无效或历史数据;
- 两边的组织、状态和权限范围是否相同;
- 查询发生在什么时间。
如果一边统计当天新增,另一边统计全部有效数据,数量不同是必然的。先统一口径,才能讨论差异是否异常。
业务口径
-> 时间范围
-> 状态范围
-> 组织与权限范围
-> 源端数量
-> 平台数量这是一套通用核对顺序,不对应某个内部数据源或真实表结构。
确认源数据是否已经具备
截至 11 月 29 日的阶段记录里,仍有一类上报数据尚未提供。这种情况下,平台没有对应数据,并不能直接认定同步任务漏数。
可以先确认:
- 数据是否已经在源系统产生;
- 当前账号是否有权限看到;
- 数据是否满足采集条件;
- 数据提供时间是否晚于任务执行时间;
- 字段是否仍在等待业务口径确认。
只有源端数据已经存在并符合采集条件,后续同步链路的排查才有明确起点。
公开文章不写真实学校、具体表号、数据源名称和字段内容,只保留“源数据尚未提供会影响平台结果”的阶段事实。
再看任务有没有读到数据
源端确认无误后,可以检查任务的抽取范围和执行状态:
任务是否触发
-> 是否成功连接源端
-> 抽取条件是否命中
-> 读取记录数量
-> 转换成功与失败数量
-> 目标端写入数量日志中如果只记录“任务成功”,仍然不够。任务可能成功执行,但抽取条件没有命中任何记录;也可能读取到了数据,却在转换或写入阶段跳过了一部分。
我会尽量分别记录读取、转换和写入数量,而不是只保留一个最终状态。
时间窗口是常见差异来源
增量同步通常依赖更新时间、主键或状态字段。时间边界处理不一致时,容易出现遗漏或重复。
下面是通用核查 SQL,不来自真实项目:
SELECT COUNT(*)
FROM source_record
WHERE updated_at > :start_time
AND updated_at <= :end_time;需要继续确认:
- 上一次结束时间是否等于本次开始时间;
- 边界使用
>还是>=; - 时间字段是否可能为空;
- 源系统和任务服务器的时区是否一致;
- 失败重跑时使用原窗口还是新窗口。
数量差异如果集中在边界时间附近,就值得优先检查这些条件。
字段映射会造成“有数据但不可用”
记录已经进入平台,不代表数据质量一定正确。类型转换、编码映射、空值处理和默认值都可能改变结果。
源字段值
-> 清洗与转换
-> 标准值映射
-> 目标字段值
-> 质量规则校验例如,源系统使用文本状态,平台使用数字编码;源端空字符串和 NULL 含义不同,平台却统一处理;日期格式转换失败后,记录可能被跳过或写入空值。
这类问题需要选择少量脱敏样本做字段级对照,不能只比较总数量。
目标端还可能有自己的处理规则
平台写入前后可能执行去重、合并、状态过滤或质量校验。如果同一业务对象存在多条记录,平台可能只保留一条;如果关键字段不满足规则,记录也可能进入异常清单而不是正式表。
因此还要确认:
- 唯一键和去重规则是什么;
- 更新已有记录还是新增记录;
- 校验失败的数据去了哪里;
- 是否存在暂存层和正式层;
- 重跑任务会不会重复写入。
这些规则必须从实际配置、代码和数据标准中确认,不能根据常见架构自行假设。
把差异缩小到具体记录
总数只能告诉我存在差异,无法直接说明原因。更有效的方法是比较业务主键或脱敏后的唯一标识,把记录分成三组:
源端有、平台无
平台有、源端无
两边都有、字段不同三类差异通常对应不同方向:第一类优先查采集和过滤,第二类检查历史数据、删除和口径,第三类检查转换和标准映射。
排查时可以先选少量记录验证链路,确认原因后再扩大范围。公开记录中只保留脱敏标识和统计结果,不保存真实个人或业务数据。
结论要能回到证据
一次数据差异排查至少应该保留:比较口径、查询时间、任务批次、源端结果、平台结果、差异样本和确认原因。
AI 可以帮助整理 SQL、列出可能原因或设计核对步骤,但最终结论仍然依赖真实数据和任务日志。不能因为某种解释符合常见模式,就把它写成当前项目已经发生的事实。
源系统和数据平台不一致时,我会先确认比较口径和源数据是否存在,再沿抽取、转换、写入和目标端规则逐层检查。先把差异缩小到具体记录,才能从“数量不一致”走到可以验证的问题原因。