先给结论:不要只重跑一次导出就宣布完整。更可靠的做法是把“分页请求是否全部发出”和“每页数据是否真正落盘”分开验证,再决定保留当前导出、改写抓取逻辑,还是退出自动导出改用分段核对。下面按这个顺序展开。
自动导出遗漏分页时,最常见的误判是把“总数对不上”直接当成工具漏抓。实际上至少有三类原因,需要不同证据区分。
这三类原因的处置方向完全不同。请求层要改抓取逻辑,落盘层要改写入方式,源站层则要考虑导出窗口是否该锁定。若不先分类,改写和退出都可能是错的。
与其核对全部记录,不如先取边界样本。具体动作是:记录导出开始和结束时的首条、末条记录标识,再单独查询这两条之间的总数。若总数与导出条数一致,说明区间内大概率完整;若不一致,再按分页单位二分定位缺失区间。
这个动作的结果会直接决定下一步。假设一次导出得到 4800 条,而按时间区间查询源站得到 5000 条,差值 200 集中在第 12 页之后,那么问题更可能是请求层在某一页后停止,而不是随机丢失。此时应优先检查分页终止条件,而不是重跑整个任务。反过来,如果缺失分散在各页且请求数正常,就更偏向落盘层问题。
需要注意适用条件:这个方法假设源站支持按同一条件重新计数,且导出期间数据没有大幅变动。若源站不支持区间计数,或导出窗口跨越大规模写入,这个反推只能作为参考,不能当作定论。
检查之后要做一个取舍,而不是默认继续用自动导出。
保留当前导出适用于:缺失集中在源站变更,且业务能接受按导出时刻的快照口径。此时要做的是在导出说明里标注时间窗口和数据口径,而不是改工具。前提是你能证明缺失记录确实在源站已不存在。
改写抓取或写入逻辑适用于:请求层或落盘层有稳定复现的缺陷,且分页规则本身可预测。典型改写包括显式记录每页请求与响应条数、对末页做二次确认、把并发写入改为按页顺序落盘。前提是你能拿到请求日志或至少能观察到分页参数变化。
退出自动导出、改分段核对适用于:分页规则不稳定、源站限流导致请求被静默丢弃,或导出结果要用于对账等强一致场景。此时可改为按时间或主键区间分段导出,每段单独核对后再合并。代价是人工介入增加,但完整性更容易验证。
假设某站点每页 100 条,导出脚本按页码递增请求,理论上应请求 50 页。实际只请求到第 38 页,且第 38 页返回条数正好是 100。这时不能直接判断“少了 12 页数据”,因为末页可能不满 100 条,也可能源站总数本就少于 5000。正确动作是先请求第 39 页,看返回是空、报错还是仍有数据。若第 39 页仍有数据,说明终止条件写错;若返回空,则要核对第 38 页是否真的是最后一页。这个判断会决定是改终止条件,还是接受当前结果。
无论选择保留、改写还是退出,都应把这次检查的结论固化为下次导出的前提。例如:记录每页请求数与落盘数、保存导出起止时间、对末页做非空确认。这些动作不保证收录或排名,也不承诺固定见效时间,但能让“完整性”从感觉变成可复核的证据。若具体工具的日志字段、导出入口或当前功能不确定,应以实际界面和文档为准,不要照搬他处描述。