结论是:只有当导出任务能证明“分页游标连续、去重键唯一、末页可判定”这三件事同时成立时,自动导出遗漏分页才可视为完整;否则应先怀疑分页边界,而不是直接补导。一个常见反例是:样本阶段只导出十几条记录,页码从1到2就结束,看起来没有漏;规模扩大后每页数量变化、排序字段出现重复值,或导出中途被限速,都会让“最后一页已到达”的判断失效。此时更可靠的动作是暂停补导,先做一次带边界标记的完整性核对,再决定是重跑全量还是只补缺口。
自动导出遗漏分页,往往不是导出程序报错,而是分页信号被误读。需要检查的是:每次请求返回的游标、页码或偏移量,是否与上一批的末尾严格衔接。若工具按时间或ID排序,下一页起点应等于上一页最后一条的排序值;若中间出现跳号、回退或重复,说明分页链已断。
可执行动作:在导出日志里抽取相邻两批的边界记录,核对“上一批最后一条”和“下一批第一条”的排序值。若两者不连续,先不要继续导出,改为记录断点位置,再判断是排序不稳定还是请求被截断。这个动作的结果会直接决定下一步:边界连续才值得补导;边界不连续则应重设排序字段或改用稳定游标。
规模化后出现例外,常因为去重键选错。若用标题或链接文本去重,同一资源在不同分页中可能被误判为重复;若用自增ID去重,又可能把不同来源的相同记录合并。检查完整性时,要区分两种重复:一种是分页重叠导致的重复,另一种是数据本身存在多条相同链接。
可执行动作:先选一个在导出范围内应唯一的字段作为去重键,例如记录ID或“来源+目标”组合;再统计去重前后数量差。若差值集中在分页边界附近,说明是分页重叠,应调整游标;若差值分散且与分页无关,说明是真实重复,不能靠补导解决。这个判断会影响下一步:分页重叠要修导出逻辑,真实重复要修数据清洗规则。
很多自动导出把“返回空列表”当作结束信号,但空结果也可能来自限速、权限变化或查询条件临时失效。样本阶段请求少,空结果通常就是末页;规模扩大后,空结果可能只是某一次请求被拒绝。因此,末页判定需要至少两个独立信号:返回数量小于每页上限,且下一次请求仍返回空或明确的分页结束标记。
可执行动作:在导出任务末尾追加一次“确认请求”,用相同条件请求下一页。若确认请求仍返回数据,说明之前的空结果是假末页,应回到断点继续;若确认请求返回空且数量小于每页上限,才可标记为完整。这个动作的结果决定是否需要重跑:假末页只需补导缺口,真末页才可结束任务。
假设一个导出任务每页最多50条,样本阶段共导出120条,分3页结束,看起来完整。规模扩大后,同样条件导出到第8页时返回空,但第9页又出现数据。此时不能直接说“工具漏了分页”,也不能直接说“补第9页就行”。更合理的检查是:回看第7页和第8页的边界排序值,确认第8页空结果是否发生在排序值重复的位置;再检查第9页第一条是否与第7页末尾连续。若连续,说明第8页是假末页;若不连续,说明中间还有缺口。
这个例子的数字只用于说明比较方法,不代表任何真实工具的数据规模。它的价值在于:样本阶段成立的条件——每页数量稳定、排序值唯一、请求不被限速——在规模化后可能不再成立。因此,不能把样本阶段的“导出成功”直接当作完整性的证据。
完成上述检查后,下一步不是立刻重跑全量,而是先输出一份缺口标记:哪些分页边界连续、哪些断点、哪些重复属于分页重叠、哪些属于真实重复。然后按缺口类型决定动作:边界连续且仅末页误判,补最后一页即可;边界不连续且缺口分散,应重设游标后重跑;去重键导致误判,应先修去重规则再导出。
需要核对具体工具时,应查看其当前文档中关于分页、游标和导出限制的说明,因为不同工具的返回字段和结束标记可能不同,不能凭样本行为推断。完整性检查的目标不是追求“导出条数最多”,而是让每一条缺失都能被解释:要么是分页边界问题,要么是数据本身重复,要么是请求被截断。只有缺失可解释,自动导出的结果才值得进入下一步分析。