结论先说:如果自动导出把分页当成“同一批次”处理,你可以用总量守恒、边界重叠和末页哨兵三项检查来确认完整性。但这个结论只在导出任务能保留分页游标或页码信息时成立;一旦工具只输出合并后的最终文件,分页痕迹被抹掉,这三项检查就失效,必须改用可复现的抽样重导来验证。
分页遗漏通常不是“少了几行”这么简单,而是导出链路在翻页时提前结束、跳页或去重过度。要检查完整性,第一步不是数行数,而是确认导出结果里是否还留有可核对的分页线索。常见线索有三类:每行带有页码或分页游标、导出日志记录了每次请求的页码与返回条数、或者文件按页拆分成多个分片。
如果这三类线索一个都没有,你面对的其实是一个已经合并的黑盒,任何“看起来数量对”的判断都不可靠。此时应先回到导出配置,打开分页标记或分片输出,再重新导一次。这个动作的直接影响是:后续检查从猜测变成可对账。
当分页线索可保留时,可以按下面的顺序做检查。它们各自能发现不同的遗漏类型,缺一项就会留下盲区。
假设一次导出声明共 12 页、每页 100 条。你得到 11 页、1100 条,末页之后直接为空。总量差 100,边界检查发现第 6 页末尾和第 7 页开头之间跳过了约 100 条记录。这指向的不是随机丢行,而是第 7 页被整体跳过。此时下一步动作应是单独重导第 7 页并比对,而不是重跑整个任务——重跑可能因为同样的游标问题再次跳过同一页。
反例往往出现在这里:前几页检查全部通过,你就认为整套导出逻辑没问题。但分页遗漏经常只在特定条件下触发,例如页数超过某个阈值、某页返回条数恰好等于页大小、或数据在导出过程中发生新增和删除。
一个典型情形是:样本只有 3 页,每页都满 100 条,边界整齐,检查全过。放大到 200 页后,中间某页因为并发写入导致返回 99 条,后续页码整体错位一页,于是末尾少了一整页数据。小样本之所以看不出问题,是因为它没有跨过触发错位的条件。因此,不能用小样本的通过结果推断全量导出完整。判断边界是否适用,要看页数规模、数据是否在导出期间变动、以及页大小是否可能被动态调整。
如果工具只给一个合并文件,无法恢复页码,可用的替代方法是抽样重导:按一个可复现的排序键(如创建时间或主键)分段,每次只导一段,记录每段的起止和条数,再与全量文件在相同区间的计数对比。这个动作的结果会告诉你遗漏是集中在某一段,还是均匀散布。集中遗漏通常指向分页游标问题,均匀少量缺失更可能是去重或过滤条件不一致。
需要注意,重导得到的数量对不上,不能单独证明第一次导出有错。两次导出之间数据本身可能发生新增或删除,过滤条件也可能被改动。要排除这些解释,应在两次导出之间固定排序键和过滤条件,并尽量缩短时间间隔。
检查完整性不是终点,而是决定下一步做什么的依据。可以按下面的对应关系处理:
最后提醒一点:导出条数归零或抓取量突然下降,都不能单独证明分页处理正确。它们也可能是过滤条件变严、数据源暂时不可用或权限范围收窄造成的。只有把条数变化和分页边界证据放在一起看,才能判断完整性检查是否真的通过。