先给结论:报告页数大于实际对象数量时,通常不是工具算错了,而是同一对象被拆成了多条记录,或统计口径把“行”当成了“对象”。去重的第一步不是删数据,而是先确认报告里一行代表什么。如果一行是一个链接,那同一域名下的多个链接就是多个对象;如果一行是一个页面,那带参数的多个地址可能指向同一页面。判断清楚这一点,再决定按哪个字段合并,后面的核对才有意义。
第一种解释是报告按“命中项”拆行。降权查询往往返回的是被处理或异常的信号,同一个对象可能因为不同目录、不同参数、不同子域各命中一次,于是对象数没变,页数却翻了几倍。这种情况下页数偏大是正常的展示方式,不代表对象真的变多。
第二种解释是统计口径把不同层级混在一起。比如报告里既有域名级记录,又有页面级记录,还有带协议和端口差异的地址,合并时没有统一层级,就会把同一个对象算成两三条。这种偏大是口径问题,需要通过规范化字段来消除。
两种解释对应不同动作:前者要按对象主键聚合,后者要先统一层级再聚合。如果搞反了,要么把本该保留的细节删掉,要么去重后仍然对不上。
可以看三个地方。第一,看重复记录的字段差异:如果除地址外其他字段完全相同,更可能是拆行;如果层级字段本身就不一样,更可能是口径混用。第二,看重复是否集中在特定目录或参数上:集中出现通常指向拆行。第三,做一次抽样,把重复项按主键分组,数一数组内条数,若组内条数普遍大于一,说明聚合前就有重复。
假设某次查询得到报告 120 行,实际业务对象只有 80 个。抽样发现其中 30 行集中在同一批带跟踪参数的地址上,去掉参数后正好回落到 80 个左右。这个假设说明:差异主要来自参数拆分,而不是对象真的增加。数字只用于说明比较方法,不代表任何真实查询结果。
主键决定“什么算同一个对象”。常见选择有规范化后的页面地址、业务系统里的对象 ID、或域名加路径的组合。选好主键后,同一主键下的多条记录只保留一条。保留哪一条要看用途:用于排查问题时保留最近一次;用于统计数量时保留任意一条即可,但必须全表统一规则,不能这次留最新、下次留最早。
实际操作可以这样走:先给每条记录生成一个规范化键,去掉不影响对象的参数和大小写差异;再按这个键分组;然后按预先定好的规则取一条。做完之后对比去重前后的数量,如果差值接近抽样中发现的重复规模,说明处理方向正确;如果差值仍然很大,就要回头检查主键是否选错。
去重后的数量会直接决定后续判断。如果去重后数量与业务对象数量接近,就可以进入问题定位;如果仍明显偏大,说明还有未识别的重复来源,比如子域或协议差异,需要继续扩展规范化规则。反过来,如果去重后数量比业务对象还少,说明主键过于宽泛,把不同对象合并了,这时要收窄主键,而不是继续删。
需要提醒的是,请求量或抓取量下降、报告行数变化,都不能单独证明去重做对了。它们可能来自查询范围调整、时间窗口变化或对象本身增减。判断去重是否合理,最终要回到主键定义和业务对象清单这两项可核对的依据上。