先看差异性质:如果报告页数多出来的行都指向同一对象,去重应保留最完整的一行;如果多出来的行是同一对象的不同词形、不同地区或不同匹配方式,去重前要先决定是否合并口径。判断依据不是页数,而是“一行代表什么对象”以及“后续动作按哪一层聚合”。
报告页数偏多,常见原因有两类。第一类是导出或分页时同一对象被重复写入,例如同一词在多个批次中被抓取两次,此时行的标识字段高度一致,合并后数量会回到合理区间。第二类是同一对象因条件不同被拆成多行,例如同一词分别按不同地区、不同设备或不同匹配方式查询,这些行在业务上可能都成立,不能简单删除。
可操作的第一步是给每行补一个稳定标识,再统计标识重复次数。假设一份报告有 300 行,其中 120 行的标识只出现一次,180 行分布在 60 个重复标识上;如果这 60 个标识各自对应同一对象,合并后对象数约为 180 个,而不是 300 个。这个数字只是用来说明比较方法,实际数量以你自己的表为准。做完这一步,下一步才知道该按标识合并,还是该保留条件维度。
保留适用于多出来的行确实代表不同查询条件,且后续动作需要按条件分别执行。例如同一对象在不同地区的搜索表现要分别用于投放或内容覆盖,删掉任何一行都会丢失执行依据。代价是报告行数继续偏高,阅读和交接成本上升,需要靠分组和筛选来控制。
改写适用于多出来的行是同一对象的不同写法,且这些写法不影响后续动作。做法是把它们归并到一个规范对象上,同时保留原始写法作为备注或映射关系。代价是需要维护一份映射,映射出错时会把本应区分的对象合并掉。适用前提是你能说清合并规则,而不是凭感觉删行。
退出适用于多出来的行来自重复抓取、失败重试或临时分页残留,且这些行没有独立业务含义。退出不是删除证据,而是把这批行移出主表并记录原因。如果无法确认重复来源,先不要退出,否则后续核对时缺少可追溯的原始记录。
一个可用的去重规则至少包含三部分:判定同一对象的字段、冲突时保留哪一行、被合并的行去了哪里。判定字段通常包括对象名称、对象类型和业务归属;如果这些字段本身不完整,重复判定就会失真。冲突保留规则要写明优先级,例如保留字段更全的一行,或保留最近一次写入的一行,但“最近”必须有可核对的时间字段支撑。
执行去重后,用合并前后数量差反推原因:差值是否接近重复抓取批次的数量,是否集中在某几个对象上,是否只在特定条件下出现。如果差值无法用已知原因解释,说明判定字段可能选错,应回到上一步补充字段,而不是继续调低阈值。这一步的结果直接决定后续是扩大去重范围,还是改为保留条件维度。
假设你手上有 5 行记录,对象名相同,但地区字段分别为空、A、A、B、B,匹配方式分别为空、短语、广泛、短语、广泛。若业务只需要知道该对象是否存在,5 行可合并为 1 行;若业务要按地区和匹配方式分别评估,则应合并为空的两行或保留全部条件组合。两种选择都成立,区别在于后续动作是按对象汇总,还是按条件拆分执行。
验证时不要只看合并后的总数,还要抽查被合并的行是否真的属于同一对象。抽查发现反例,就应调整判定字段或改为保留,而不是为了页数整齐强行合并。这个动作的结果会影响下一轮报告的字段设计:如果反例集中在某个字段缺失上,下一轮就应优先补全该字段。
去重完成后,把判定字段、保留优先级和退出原因记录在报告说明中,并让导出环节沿用同一套标识。这样下次页数再次偏高时,可以先比对标识是否稳定,再判断是数据源变化还是处理环节遗漏。若差异持续出现在同一批对象上,优先检查对象定义是否发生变化,而不是反复调整去重脚本。
需要提醒的是,页数减少本身不能证明去重正确;它也可能来自过滤条件过严或字段缺失导致的误合并。因此每次去重后都应保留可回溯的原始行和合并记录,直到下一轮核对确认对象数量稳定为止。