先判断遗漏的是接口分页还是页面渲染分页:前者要查游标或页码参数是否在导出时被固定,后者要查异步加载是否在滚动结束前就被截断。两种原因的检查动作完全不同,选错方向会让补数越补越乱。
如果导出工具依赖接口返回的下一页标识,而标识在某一页之后为空,通常说明服务端已经给出终止信号,此时继续翻页不会补回数据。反过来,如果标识一直存在但导出结果条数明显少于预期,问题更可能出在导出程序提前中断或去重规则误删。
一个可区分的证据是:把同一查询条件分别在界面翻页和自动导出中执行,记录每页返回的条数。假设界面在第 4 页显示 20 条,而自动导出只拿到 12 条,且第 5 页之后仍有内容,那么更可能是导出端的分页步长或去重键设置有问题,而不是数据源本身缺页。这个判断只是假设示例,实际条数需要你自己核对。
只有确认终止信号真实存在时,才适合保留现有逻辑并改为记录终止页码;如果终止信号可疑,应改写为按时间或主键递增拉取,而不是继续依赖页码。
不要只对比总数,总数相同也可能存在前后页错位。更可靠的做法是抽取每页的首尾记录,检查相邻页之间是否连续。具体动作是:
如果补查能返回记录,说明原导出确实漏页,下一步应修正分页参数;如果补查为空,则要怀疑是查询条件在导出过程中发生了变化,比如时间范围被动态刷新。
当遗漏只发生在历史区间,且下游已经不再消费这批数据时,退出的成本最低,只需在导出记录中标注不完整区间,避免后续误用。当遗漏区间仍被报表或对账引用时,改写导出逻辑更合适,但要接受一次全量重拉的时间成本。
判断依据可以看两个条件:一是该区间是否还有新的增量写入,二是下游是否按主键去重。如果两个条件都满足,改写后重拉的风险较低;如果下游不去重,重拉可能造成重复计数,此时应先保留原结果并单独补差集。
每次自动导出后,至少执行一次边界连续性检查和一次总数抽样核对。边界检查负责发现分页错位,抽样核对负责发现条件漂移。两者都通过,才能认为本次导出完整。若只做总数对比,遇到等量替换的遗漏时无法察觉。
这些步骤不依赖具体工具,任何支持分页导出的查询都可以套用。具体工具是否提供终止标识、是否支持按主键拉取,需要以你当前使用的版本为准。