先给结论:自动导出遗漏分页时,完整性检查不能只看总条数,而要把“应导出集合”和“实际导出集合”分开核对。做法是先确定一个可独立复算的分页基准,再用边界页比对、键值差集和抽样回查三层验证,确认遗漏是分页逻辑问题、筛选条件问题还是导出中断问题,再决定是重跑、补跑还是只补差异部分。
遗漏分页的本质是实际结果少于应有结果,所以第一步不是急着重导,而是先锁定一个不依赖导出工具的基准。假设有一个旧内容库,需要退出旧合作关系,但其中一部分历史页面仍有保留价值,于是要按分页把符合条件的记录导出。此时可以用数据库或接口的直接计数、按主键区间分段计数、或按时间字段逐段累计,得到应导出总量。这个基准必须能在导出工具之外独立复算,否则两边都错时无法发现。
固定基准时要注意三个容易出错的点:筛选条件是否与导出时完全一致,排序字段是否有重复值,分页边界是开区间还是闭区间。排序字段有重复值时,翻页可能跳过或重复记录,这会让总数看起来接近但内容并不完整。因此完整性检查的第一动作,是把排序键换成唯一键,或加一个唯一键作为次级排序,然后再复算总量。
只知道总数少了还不够,要定位漏在哪一页。可行做法是记录每一页的首条和末条唯一键,导出完成后检查相邻页之间是否连续:上一页末条键与下一页首条键之间,按排序规则不应存在被跳过的记录。若某两页之间出现明显断档,遗漏大概率发生在该分页边界。
另一种更直接的方法是按固定区间分段导出,例如每段一千条,逐段比对段内条数。如果某段实际条数少于预期,就把该段再细分为更小区间,直到锁定具体范围。这个动作的结果会直接影响下一步:如果遗漏集中在少数边界,说明是分页游标或偏移量问题,补跑这些区间即可;如果各段都少一点,说明是筛选条件或权限范围问题,需要回到基准重新核对。
条数相等不代表内容完整,可能一边漏了旧记录、一边多了重复记录。更可靠的方式是导出唯一键集合,与基准键集合做差集,分别得到“应有未导出”和“导出但不应有”两类。差集为空,才说明在键这一层完整。
操作上可以先导出全部唯一键,再与基准键列表比对。若数据量较大,按主键区间分块比对,避免一次性载入。差集结果要分类记录:
这一步的结果决定了后续是补数据还是修条件。若差集集中在某个时间之后,往往与导出中断或增量逻辑有关;若差集随机分布,更可能是排序不稳定导致的翻页跳漏。
键集合完整后,还要确认字段值没有在导出过程中被截断或替换。做法是从基准中随机抽取若干条,与导出结果逐字段比对,重点看长文本、多值字段、时间戳和状态字段。假设抽取的样本里,键都存在,但部分记录的更新时间字段为空,这说明导出映射或字段权限有问题,而不是分页遗漏,处理方式与补分页完全不同。
抽样比例不需要固定,关键是覆盖不同分页位置和不同数据状态。若抽样发现字段异常集中在某一类记录,应扩大该类记录的检查范围,再决定是否整体重导。
完整性检查的价值在于给出可执行的判断,而不是停留在“好像漏了”。可以按以下顺序收敛:
需要提醒的是,导出条数变少、抓取量下降或某项统计归零,都不能单独证明分页处理正确,它们也可能是筛选收紧、数据本身减少或导出中断造成的。只有把基准、边界、差集和字段四层证据放在一起,才能判断遗漏的真实原因,并决定是重跑全部、补跑区间,还是只修正条件后重导。对旧内容、旧系统或旧合作关系退出场景而言,保留仍然有价值的部分并确认其完整导出,比追求一次性全量重导更稳妥。