先给结论:不要用“导出条数是否等于页面显示条数”来判断完整性。分页遗漏往往发生在两处——请求边界和去重合并。前者表现为最后一页缺几行,后者表现为中间页被覆盖。要区分它们,需要看导出文件里的行顺序、唯一键分布和分页游标是否连续,而不是只看总数。
假设某次查询返回约 1,200 条记录,工具界面显示“共 12 页”。你只抽查前两页,条数和字段都对;但把 12 页全部导出后,合并结果只有 1,180 条。此时有两种解释:
这两种解释会导向完全不同的修复动作:前者要改抓取逻辑,后者要改合并键。只盯着总数无法区分。
假设每条记录有一个稳定唯一键,例如查询词加落地页组合。把导出结果按唯一键排序,检查每个键首次出现的页码区间。如果某些键只出现在前几页、后续页完全没有,且缺失集中在某个页码之后,更支持请求边界丢失。如果每个键都能找到,只是总数少,则更支持去重过度。
很多工具用游标而不是固定页码。检查导出日志里记录的游标值是否单调、是否出现重复或跳变。若游标在某一步之后重复,说明抓取在同一页打转,后续页从未请求;若游标跳变,说明中间页被跳过。这个证据比总数更直接。
如果排序字段存在大量空值,分页边界可能不稳定:同一行在不同页之间移动,导致去重时被误删。做法是固定一个非空且唯一的排序键再导出一次。若第二次导出条数恢复,说明问题出在排序不稳定,而不是抓取遗漏。
具体动作:在导出前把排序字段改成“唯一键升序”,关闭随机或按热度排序,重新执行一次全量导出。结果如何影响下一步:
这个动作不需要改代码,但能快速把问题范围缩小一半。
小样本抽查通过,不代表全量导出可靠。以下条件会让结论失效:
因此,判断完整性时要把“导出时刻”和“数据快照”一起记录。若无法确认快照一致,任何条数对比都只能作为线索,不能作为结论。
完成这四步后,你得到的不是“是否完整”的单一判断,而是缺失发生在请求、合并还是快照层面的定位。定位清楚,下一步的修复动作才有明确对象,也才不会把排序抖动误当成抓取遗漏。