结论先行:如果缺项会影响页面的核心判断(例如页面主题、目标查询、规范链接),先隔离该条记录,不要让它进入任何批量写入;如果缺项只影响辅助字段(例如备注、优先级、更新人),可以先补录再放行。判断标准不是缺了多少字段,而是这个字段会不会改变下游动作。
源数据通常来自关键词表、页面清单、抓取导出或人工登记。缺项本身不可怕,可怕的是下游脚本把空值当成有效值处理。比如“目标URL”为空时,有些批处理会跳过该行,有些会写入空字符串,有些会把上一行的值沿用下来。三种行为对应三种后果,只有第一种是安全的。
可以按这个顺序判断:
实际动作:在数据表里新增一列 blocked_reason,把被隔离的行标注为具体缺项,例如“缺目标URL”。这样做的结果是,后续筛选时能一眼看出隔离原因,而不是把所有缺项混成一个“待处理”池子,避免补录时再次漏项。
先补录再放行成立的条件是:缺项字段不参与页面定位和内容判断,且补录来源可靠。例如优先级为空,可以从已有分组规则推导;更新人为空,可以由执行人默认填写。代价是补录环节会引入新的判断,如果补录规则不统一,同一批数据会出现两种口径。
先隔离再补录成立的条件是:缺项字段一旦错误,会扩散到多个页面或多个批次。例如规范链接为空、目标查询为空、页面归属分组为空。代价是隔离会让当批可执行量下降,如果隔离规则过严,可能大量记录被卡住,反而拖慢整体进度。
关键区别在于错误是否可逆。只影响排序的字段,错了可以下一批修正;影响写入目标的字段,错了会把改动落到错误页面上,回滚成本高得多。
假设你选择“先隔离再补录”,但隔离队列没有版本或批次标记,补录完成后直接把整表重新导入。此时如果补录期间上游又更新了源数据,新旧记录会混在一起,隔离反而制造了重复行。这种情况下,隔离本身不是问题,缺少批次标识才是问题。
短例子:假设一批100条记录,其中20条缺目标URL。若直接放行,脚本可能把空URL替换为站点首页,造成20次错误写入;若隔离这20条,剩余80条可正常执行,但必须记录隔离批次,否则下次合并时无法判断哪些行已经补录过。这里的关键不是100和80的比较,而是错误写入是否可被下游识别。
先做一次小范围试跑:只取10条缺项记录,按“隔离”和“补录”各处理5条,观察下游输出是否出现空值、错位或重复。如果隔离组的输出干净、补录组出现字段错位,就说明该类缺项必须隔离;如果两组输出都正常,再检查补录来源是否稳定。
试跑结果会直接影响下一步:输出干净且补录来源稳定,可以把该字段移出隔离清单;一旦出现错位或重复,就保留隔离,并把补录规则写进数据校验环节,而不是留给执行人临时判断。这样,缺项处理就从一次性救火变成了可复用的检查点。