先给有条件的结论:如果导出任务本身支持“按时间窗口或结果总数对账”,并且你能在导出前后各取一次同口径的总量,那么遗漏分页通常可以定位到具体是哪一页或哪一批没有被写入;但如果软件只提供“导出成功/失败”状态、不提供任何可核对的计数,那么完整性无法在导出环节确认,只能改为在导入或合并后做行级对账。下面把这两类情况分开讲,并给出一个能改变下一步动作的检查点。
要判断分页是否漏了,核心不是看“导出成功”提示,而是看两个数字是否对得上:导出前的候选总量,和导出文件实际承载的记录数。这里的“候选总量”可以来自软件内的结果计数、列表底部的条数、或你自己按同一筛选条件单独统计的一次结果。关键是两次统计的筛选条件、时间范围、去重规则必须一致,否则对账没有意义。
实际操作上,可以先做一次全量计数并记下数字,再执行导出,最后统计导出文件的行数(去掉表头、去掉空行)。如果两者一致,说明这一轮分页没有明显丢失;如果导出文件行数明显少于候选总量,且差额接近某一页的容量,那大概率是分页边界处漏了一页或几页。这个动作的结果会直接决定下一步:差额为零时,可以进入字段完整性和重复性检查;差额不为零时,应优先排查分页参数,而不是先怀疑数据源本身。
有一种情况会让上面那套对账失效:软件在翻页过程中,数据源本身在变化。比如你一边导出,一边有新记录写入或旧记录被更新,导致某一页在两次读取之间发生了位移,原本在第 3 页的记录被挤到第 4 页,而第 4 页已经被读过。此时导出文件的总行数可能仍然等于你最初记下的候选总量,但内容里混入了重复项、漏掉了被挤走的项。
判断这种反例是否成立,可以看两个证据:一是导出文件里是否存在主键或唯一标识重复;二是同一筛选条件下,隔一段时间再导出一次,两次结果的主键集合是否稳定。如果重复项集中出现在分页边界附近,或者两次导出的主键集合差异明显,那么问题不在分页参数,而在导出期间数据源发生了变动。这时继续调整每页条数不会解决问题,应该先让数据源在导出窗口内保持稳定,再重新对账。
行数对账只能发现“少了”,发现不了“少了 A 却多了 B”。更可靠的做法是导出主键集合,然后做差集。假设一次导出得到 1000 条记录,你手头另有一份同一时间窗口的候选主键列表共 1000 条,两者行数相同,但差集显示各有 7 个主键只出现在其中一边,那就说明总量虽然对上了,内容并不一致。
具体动作可以这样安排:先把导出文件里的主键列单独取出,排序去重;再把候选主键列表同样排序去重;然后比较两个集合。只出现在候选列表里的主键,就是导出遗漏的;只出现在导出文件里的,可能是筛选条件不一致或数据源变动引入的。这个结果会决定下一步是回到分页设置,还是回到筛选条件核对。
即使主键集合对得上,分页遗漏也可能以另一种形式存在:某一页的记录被写入了,但字段被截断或错位。这种情况下主键还在,内容却不可用。检查时不要只扫首尾几行,应该按页容量分段抽样,重点看每一段的边界行,因为分页边界最容易出现字段错位、换行符截断或引号未闭合。
可以按这个顺序查:第一,字段数量是否每行一致;第二,含分隔符或换行符的字段是否被正确转义;第三,数值型和日期型字段是否在边界行出现空值或异常格式。如果只有边界行异常,说明问题出在分页拼接环节,而不是数据源;如果异常行随机分布,则更可能是源数据本身的问题,需要回到数据源核对。
综合来看,检查完整性应该按“先对总量、再对主键、最后查结构”的顺序推进。如果总量和主键集合都一致,结构抽查也没有边界异常,那么这一轮导出可以视为完整,下一步是进入使用环节;如果主键差集不为空,先不要急着重新导出,而应确认导出期间数据源是否稳定、筛选条件是否与候选列表完全一致。只有在这两个前提固定之后,重新导出才有比较意义。
需要提醒的是,请求量归零、导出任务显示完成、文件大小正常,这些现象都不能单独证明分页完整。它们各自还有别的合理解释:请求量归零可能是缓存命中,任务完成可能只代表进程结束,文件大小正常可能只是行数够但内容错位。因此判断完整性时,应以可对照的总量和主键集合为主要依据,而不是以状态提示或文件体积为准。具体软件是否提供结果计数、是否支持主键导出,需要以你当前使用的版本实际界面为准。