先看导出任务的分页边界,而不是先看总数。自动导出遗漏分页最常见的两种情况是:任务在最后一页之前被截断,或者分页游标在翻页过程中跳过了中间某段。区分这两者,靠的是把导出文件里的记录标识与查询结果页的可见标识做逐段比对,而不是只核对总条数。
很多人检查完整性时只看一个数字:导出文件的行数是否等于查询结果声称的总条数。这个做法在一种情况下会失效——如果导出任务重复抓取了某一页,同时漏掉了另一页,总行数仍然可能对得上。此时总数给不出任何信号,必须换一种证据。
另一种更容易误判的现象是:导出文件的开头和结尾都正常,缺失发生在中间。这通常指向翻页参数在某一页之后发生偏移,而不是任务提前结束。两者的修复动作不同,所以先分清是哪一种,比急着重新导出更重要。
解释一:任务被截断。导出在达到某个页数、条数或时间上限后停止,后续分页从未被请求。特征是缺失集中在尾部,且最后一条记录的排序位置明显靠前。
解释二:分页游标跳页。翻页过程中某一页被跳过或重复,缺失出现在中间。特征是首尾完整、中间出现连续或断续的空洞,且空洞两侧的记录标识不连续。
能区分两者的证据是排序键的连续性。如果导出结果按时间、ID 或其他稳定字段排序,那么把导出文件里的排序键按顺序排列,观察相邻两条之间的间隔是否异常放大,就能定位空洞位置。尾部缺失指向截断,中间空洞指向跳页。
假设查询结果按 ID 升序排列,且 ID 大致连续(注意:ID 连续只是假设,真实数据可能有删除和跳号,所以要用区间而非单点判断)。可以这样做:
这个动作的结果直接决定下一步:确认是导出遗漏后,需要检查分页参数是否在某一页之后失效;确认是数据跳号后,不需要重新导出,只需在核对记录里标注该区间为正常空档。
除了排序键,导出文件里还有一些结构线索可以帮助判断。比如分页标记、页码字段或批次编号。如果导出工具在每条记录中写入了来源页码,那么把页码按顺序排列,看是否存在跳号或重复,是最直接的证据。如果没有页码字段,可以看记录写入的时间戳或批次标识,判断是否存在某一批次整体缺失。
需要注意:不同工具的分页实现不同,有的用页码,有的用游标,有的用偏移量。具体字段名称和写入方式需要以实际导出文件为准,不能假设所有工具都会写入来源页码。
在决定重新导出之前,先完成三件事:确认空洞位置、确认空洞性质(导出遗漏还是数据跳号)、确认空洞是否影响后续使用。如果空洞位于你实际需要的区间之外,重新导出的优先级可以降低;如果空洞位于关键区间,则需要先调整分页参数或缩小单次导出范围,再重新执行。
缩小范围是一种常见的规避方式:把一次大范围导出拆成多个小范围导出,每个小范围单独核对首尾边界。这样即使某一批出现遗漏,影响范围也可控,且更容易定位是哪一段分页出了问题。
每次自动导出后,按固定顺序执行:先看首尾是否完整,再按排序键扫描中间空洞,最后对候选空洞做区间复核。这个顺序的价值在于,它不依赖总数这一个容易失真的信号,而是用排序键的连续性作为主要证据。当排序键本身不连续时,改用页码或批次字段作为替代证据,并在核对记录中注明所用字段和判断依据。