先确认导出任务实际抓取了哪些分页,再用可重复的对账方法判断遗漏发生在哪一步。直接重跑一次导出,并不足以证明上次结果完整;更稳妥的做法是保留任务配置、分页记录和本次导出文件,然后按下面两种思路取舍。
自动导出后少了几页,常见原因不是单一方向。第一种解释是查询端没有取全:任务在翻页过程中提前停止,或某一页返回为空、超时后被跳过。第二种解释是导出端被截断:查询端其实拿到了完整结果,但导出时按行数、文件大小或时间窗口做了限制,后面的分页没有写进文件。
这两种情况的代价不同。如果是抓取不完整,补跑缺失页通常就能补齐;如果是导出被截断,重复抓取只会浪费请求,需要先调整导出范围或分批导出。判断顺序应当反过来:先看导出文件是否覆盖了任务记录中的最后一页,再决定要不要重抓。
能区分上述解释的证据,是任务运行时留下的分页边界记录。它不需要很复杂,至少应包含:本次任务开始时间、结束时间、请求过的页码或游标、每页返回条数、最后一页是否为空、导出文件行数、导出文件首尾记录的关键字段。
如果记录显示最后一页已经请求且返回非空,但导出文件行数明显小于各页条数之和,问题更可能在导出环节。反之,如果记录停在中间某一页,后面没有请求痕迹,或者某页返回为空后任务直接结束,问题更可能在抓取环节。这里要注意:某一页返回为空,不等于整个查询结果已经结束,也可能是该页暂时无数据、参数变化或请求被限流。因此不能只凭一次空结果下结论,应结合前后页是否连续来判断。
假设某次批量查询任务配置为每页 100 条,计划抓取 8 页,最终导出文件只有 600 条。先不要直接重跑,而是做一次对账:
这个例子的数字只用于说明比较方法,不代表任何工具的实际限制。对账完成后,下一步动作取决于差额位置:抓取端缺页就补抓对应页;导出端截断就缩小单次导出范围,或改为按页拆分文件后再合并。这个动作会直接影响后续是否还需要重新请求查询端,避免把导出问题误当成抓取问题反复重跑。
两种做法都成立,但适用条件不同。
如果两种迹象同时存在,即请求记录不完整且导出文件也偏小,应先解决抓取端,再处理导出端。因为抓取端缺页时,导出端无论怎么调整都无法补齐不存在的数据。
与其每次凭感觉判断,不如把检查固定为三步:第一步,保存任务配置和分页记录;第二步,导出后立即计算文件行数并与分页记录中的条数之和比较;第三步,抽查首条、末条和每个分页边界附近的记录,确认没有整页丢失或重复。
如果工具本身不提供分页记录,可以用导出文件中的时间字段或序号字段反推覆盖范围,但这种反推只能作为辅助证据,不能替代请求记录。具体工具是否提供分页日志、日志保留多久、导出是否有行数上限,需要以该工具当前说明为准,不能沿用旧版本的经验。
当差额无法解释时,最稳妥的动作是缩小单次任务范围,按固定页码区间分批查询和导出,再逐批对账。这样做会增加操作次数,但能把“完整性”从一次性的整体判断,变成每个批次都能验证的结果,后续排查也更容易定位到具体区间。