先给结论:不要用“导出条数”去对比“页面显示条数”,这两个数字来源不同,对不上是常态。判断完整性应该换一条链路——把导出文件里的记录总数,和你在工具里能独立复现的“筛选条件+时间范围”结果做交叉核对,再对分页边界做抽样验证。如果三者对不上,优先怀疑分页参数在自动翻页时被重置,而不是数据真的缺失。
自动导出最常见的假象是:翻到最后一页时记录数明显少于前面的页,于是被判定为“漏了”。但分页的最后一页本来就可能不满,这是整除余数的结果,不是异常。真正需要警惕的是另外两种信号:
这两种信号才有诊断价值。只看“某页变少”会把你引向错误的修复方向。
完整性检查的核心动作,是让导出结果和一个独立的计数基准对齐。具体做法:在工具里把导出时用的筛选条件(时间范围、状态、地区、设备等)原样设一遍,只改一个变量——把分页关掉,或者把每页条数调到最大,看工具自己报出的记录总数。这个数字就是你的基准。
如果工具不支持取消分页,退一步:固定排序字段为一个唯一值(如ID或创建时间精确到秒),然后分别导出“前N条”和“后N条”,检查两个文件的主键集合是否有交集、并集是否等于基准。这里要注明假设:该方法成立的前提是排序字段在导出期间没有新数据插入,否则边界仍会漂移。
动作的结果直接决定下一步:如果导出总数等于基准,缺失问题基本可以排除,你该去查的是下游环节(比如文件合并、去重脚本)而不是抓取;如果导出总数小于基准,差额就是你要定位的范围,进入下一步的分页边界抽样。
全量逐条比对成本太高,也没必要。真正容易丢记录的位置是页与页的接缝。抽样时按下面的顺序做:
如果接缝处出现跳号,记录缺失就发生在那个位置。此时回到导出配置,检查自动翻页是否携带了上一页的游标或偏移量。常见原因是偏移量按“已抓取条数”累加,而抓取过程中有记录被过滤掉,导致偏移量虚增,后面的页整体前移,边界记录被跳过。
这一节针对本篇的具体情境:你正在清理旧内容、旧系统或旧合作关系,导出数据是为了决定留哪些。完整性检查在这里的目的不是“一条不差”,而是“别把还有价值的记录漏在缺失的那一页里”。
取舍可以按两个条件分开处理:
所以完整性检查的严格程度应该和记录类别挂钩:保留类要求接缝零跳号,改写类允许少量缺失但要有主键清单兜底,退出类不必逐条核对。把三类混在一起做全量校验,是在为不重要的数据付出同等成本。
确认缺失后,不要立刻重导全量。先做一次小范围复现:把时间范围缩小到缺失页对应的那一段,单独导出,看缺失是否稳定出现。如果小范围导出完整,说明问题出在长任务的翻页状态保持上,解决办法是分段导出再合并,而不是换工具。如果小范围导出仍然缺,再检查筛选条件里是否有“已删除”“已下线”之类的状态被默认排除——旧内容清理场景下,这类默认过滤恰恰会把你最想保留的记录挡在外面。
分段导出后合并时,用主键去重并记录每段的起止主键,这样即使某段再次缺失,你也能从接缝处快速定位,而不必重跑整个流程。