先给结论:不要只看导出文件的总行数,也不要因为某一页没出现就立刻重导。正确顺序是先用分页边界特征判断“是漏页还是漏行”,再决定是补导缺失页,还是改用带游标或时间切片的导出方式。两种判断对应完全不同的动作。
自动导出遗漏分页通常有两种表现,处理方式完全不同。
判断依据不是行数,而是分页边界记录。如果导出结果保留了页码或偏移量字段,直接检查相邻页的首尾记录能否衔接;如果没有页码字段,就用排序键(如 ID、时间戳)检查相邻区间的连续性。缺整页时,断点会出现在页与页之间;缺页内记录时,断点会出现在同一页内部。
如果自动导出工具允许指定游标、起始 ID 或时间区间,优先放弃“按页码翻页”的方式。页码分页在数据持续变动时天然不稳定:导出第 3 页到第 4 页之间若有新记录插入,原本第 4 页开头的记录会被挤到第 5 页,造成看似漏页、实为位移。
具体动作:把导出拆成若干固定区间,例如按 ID 段 1-10000、10001-20000 分别导出,每段导完后记录该段的实际首尾 ID。全部导完后,按 ID 排序检查相邻段是否首尾衔接、有无重叠。衔接处出现空洞,就是真正遗漏的位置;出现重叠,则说明区间边界设置重复,需要去重而非补导。
这个动作的结果会直接决定下一步:如果只有个别区间有空洞,补导该区间即可;如果空洞分散且无规律,说明数据在导出期间仍在变动,应改为先冻结数据快照或缩短单次导出时间窗,而不是反复重试。
当工具只提供页码或偏移量分页,无法指定游标时,完整性检查要换一种做法。
这里要注意一个常见误判:某页记录数变少,并不一定等于漏数据。它也可能是该页对应的数据在这段时间被删除、状态变更后不再符合筛选条件,或接口对单页返回数量设了上限。要排除这些解释,可以固定筛选条件后短时间内重复请求同一页,观察返回是否稳定;若稳定偏少,更可能是筛选或上限问题,若忽多忽少,才更接近分页请求失败。
假设某次导出共 20 页,第 7 页只有 3 条而其余页均约 50 条。此时不要直接补导第 7 页,而应先确认该页筛选条件是否与整体一致、单页上限是否被触发。确认无误后再补导,才能避免把正常结果当成遗漏反复处理。
无论哪种条件,都建议保留一份可复核的校验记录,而不是只留最终文件。
行数一致但内容不同,同样属于完整性问题;行数不同也可能只是数据变动。只有按排序键比对集合差异,才能定位到具体缺失的是哪几条,从而决定补导范围。
如果目标数据在导出期间持续新增或更新,那么任何一次自动导出都只能反映某个时间点的近似状态。此时检查完整性的目标应改为“区间可追溯”,即每个导出片段都能对应到明确的时间或 ID 范围,片段之间不重叠、不空洞。具体做法是先确定一个截止时间点,只导出该时间点之前的数据,导出完成后再单独处理之后的新增部分。若强行要求一次导出覆盖全部且完全无遗漏,往往会陷入反复重导却始终对不齐的循环。
判断是否属于这种情况,可以看导出过程中排序键的最大值是否在持续变大;若在变大,说明数据仍在写入,应改用时间切片并接受分片导出,而不是继续按页码补导。