先给结论:自动导出只抓到了第一页或前几页,不能直接认定数据丢失,也不能直接认定软件有问题。你要先判断遗漏发生在哪一层——是导出任务本身没翻页,还是翻页了但结果被去重、过滤或截断。检查完整性的核心动作是:拿一个已知总量的分页结果,用“逐页计数”和“合计计数”两条路径对账,差额出现在哪一步,问题就锁定在哪一步。下面按两种常见条件分别说明该选哪种做法,以及代价是什么。
如果查询结果页明确显示了总条数或总页数,这是最省事的检查路径。做法是记录总数,再让导出任务跑完,比较导出条数与总数是否一致。一致就说明翻页链路基本完整;不一致时,差额就是排查入口。
具体动作:先手动翻到最后一页,记下末页的条数和页码,算出理论总数。然后运行自动导出,导出完成后统计行数。若导出条数少于理论总数,优先怀疑三种情况:翻页请求在某一页中断、相邻页出现重复记录被去重、部分记录因字段缺失被过滤掉。
这一步的结果会直接决定下一步:如果差额恰好等于某一页的条数,多半是那一页请求失败,重跑该页区间即可;如果差额是零散的、不规则的,更可能是去重或过滤规则在起作用,这时要继续查导出配置而不是重跑。
代价:依赖总数显示。有些结果页不给出稳定总数,或总数本身是估算值,这时对账基准不可靠,需要换到条件二的方法。
当结果页不显示总数,或总数随查询条件浮动时,不能拿一个数字当基准。此时改用逐页指纹:对每一页记录首条和末条的唯一标识(比如标题加链接、或记录ID),导出完成后再核对相邻页之间是否衔接、有没有整页缺失。
具体动作:手动翻前几页和最后几页,记录每页首末标识;再检查导出结果里这些标识是否都能找到、顺序是否连续。如果中间某一页的首末标识在导出结果里完全找不到,说明那一页整体漏掉了;如果标识都在但顺序错乱,说明是排序或合并环节的问题,不是漏页。
这一步的结果影响下一步:整页缺失要回到翻页逻辑,检查页码递增是否在某个值后停止;顺序错乱则要检查导出时的排序字段是否和查询页一致,不一致会导致对账时误判为缺失。
代价:逐页核对耗时,页数多时只能抽样。抽样时要覆盖开头、中间、结尾三段,只查首尾容易漏掉中间断页。
以下几种现象经常被误判为分页遗漏,需要先排除:
排除这些之后仍然对不上,才按真遗漏处理。判断依据是:标识确实不存在,且不是被去重或过滤规则主动排除的。
假设某次查询手动翻页看到共12页,每页20条,理论240条;自动导出得到217条,差23条。这个差额既不等于一页(20),也不等于两页(40),说明不是整页丢失。
接着抽查导出结果,发现第6页的首末标识都在,但第7页只有前3条、后17条缺失。这时可以推断:翻页请求在第7页中途失败,而不是整页没翻。下一步动作是单独重跑第7页区间,而不是重跑全部12页。重跑后如果补齐到237条,剩下的3条差额再去查去重规则;如果重跑仍然停在同样位置,则要检查该页是否存在触发中断的特殊记录,比如字段过长或编码异常。
这个例子的数字仅用于说明比较方法,不代表任何实际工具的产出规模。
与其每次凭感觉判断,不如固定三步:第一步,导出前记录基准(总数或首末标识);第二步,导出后先对总数、再抽查中间页;第三步,把差额分类为整页缺失、部分缺失、去重合并、排序差异四类,分别对应不同的处理动作。这样做的结果是,下一次出现遗漏时,你能在几分钟内判断该重跑、该改配置,还是该核对查询条件,而不是反复重导却找不到原因。
需要提醒的是,不同工具对翻页、去重、导出的处理方式并不相同,上面提到的具体行为需要以你实际使用的软件为准,涉及具体功能时建议核对当前版本的说明。