结论:只有当新对象格式能稳定映射到“一个可独立判断的链接关系”时,才应扩展输入规范;如果新格式把多个链接关系混在同一行,或缺少判断链接方向所需的信息,正确做法是先拆行或补字段,而不是让工具直接吞下原始格式。下面把判断条件、反例和下一步动作拆开说明。
输入规范通常不是一条规则,而是三层:一行代表什么、哪些字段必须出现、字段值如何被解释。对象格式变化时,先确认变的是哪一层,因为三层的改动代价不同。
可操作的判断动作:取十条新格式样本,逐条问“这一行能不能只对应一个来源页到目标页的关系”。十行都能回答“是”,才进入改规范的下一步;出现“否”,先回到数据来源处理拆分。
直接扩展输入规范有两个同时成立的条件。
条件一:字段可唯一对应。新格式里的每一个位置,都能对应到判断链接关系所需的字段,例如来源地址、目标地址、链接出现位置、发现时间。字段名可以不同,但映射不能有歧义。
条件二:异常值可被单独识别。当某行缺少目标地址、地址格式不完整或同一行出现重复关系时,规范应能让工具把这行标成“待确认”,而不是静默跳过或强行拼接。
假设一个短例子:旧格式每行是“来源页地址 + 目标页地址”,新格式每行是“来源页地址 + 目标页地址 + 备注”。如果备注里可能包含分隔符,直接按分隔符切分就会把备注截断,甚至把备注片段误当成新字段。此时应先确认备注列是否独立,再决定是否扩展规范;若不能独立,应把备注移出输入对象,而不是在解析规则里加更多猜测。
反例是:新格式看起来只是多了一列,但这一列包含“是否已处理”的状态标记,而不同批次的标记含义不一致。此时如果直接把它纳入输入规范,工具会把状态标记当成链接属性参与判断,导致同一组链接在不同批次里得到不同结果。
这类情况下,扩展规范会让原本可比较的对象变得不可比较。更稳妥的做法是把状态列拆到单独的记录中,让检查工具只处理链接关系本身。状态信息可以用于后续筛选,但不进入链接关系判断。
另一个需要留意的现象是:某次检查中待确认行数突然归零,并不自动证明输入规范改对了。它还可能来自字段被整体跳过、分隔符恰好没有触发冲突、或样本量太小。要区分这些原因,可以保留一小批已知存在异常的样本,观察它们是否仍被标出;如果异常样本也归零,说明规范可能把问题藏起来了,而不是解决了。
建议按以下顺序执行,每一步的结果决定下一步是否继续。
只有对照样本显示差异可解释、异常样本仍能被标出时,才把新规范用于全量数据。否则继续保留旧规范处理历史数据,新格式单独走一条输入路径,避免把两种对象混在同一批结果里比较。