先给结论:对象格式变化后,不要急着把旧输入规范整份重写,先判断变化属于“字段映射变化”还是“对象语义变化”。前者只需改输入层,后者必须同时改规范、校验和抽样口径。判断依据是:新对象里同一个词是否仍表示同一类实体;若仍是,改映射即可;若不再是,必须重建规范。
当对象格式变化只是列名、分隔符、编码或字段顺序改变,而每个字段的含义没变,选择“只改映射”成本最低。做法是保留原规范,新增一层字段对应表,把新对象字段指向旧规范字段,再跑一批历史对象做回归比对。若比对结果中,同一查询词在旧规范和新映射下落入同一分组,说明映射成立,下一步只需更新文档和校验脚本。
当对象格式变化伴随语义变化,例如原来一行代表一个查询词,现在一行代表一个查询词加一个地区变体,或原来一个字段是词本身,现在变成词加修饰模板,就必须重建规范。因为此时“输入单位”变了,继续套旧映射会把不同实体压进同一行,导致后续分组、去重和抽样都失真。重建规范的动作是:先定义新的最小输入单位,再规定哪些字段参与去重,最后用新旧两批对象分别跑一遍,比较分组边界是否一致。
这三组证据只用于判断方向,不单独证明某个处理正确。请求量归零、抓取量下降或某字段为空,都可能有其他解释,例如采样窗口变化、对象来源切换或字段被上游省略,不能直接当作规范需要重建的理由。
具体动作分三步。第一步,把旧输入规范冻结成一个版本,记录它接受的对象格式、字段含义和去重键。第二步,为新对象建立过渡层,只做字段映射和类型转换,不改分组逻辑。第三步,用同一批词分别走旧规范和过渡层,输出两份分组结果,人工抽查差异最大的若干组。
这个动作的结果会直接影响下一步:如果差异集中在少数由格式引起的空值或类型错误,修完过渡层即可继续用旧规范;如果差异集中在分组边界本身,说明对象语义已变,应停止在旧规范上打补丁,转入重建规范。假设有一批对象,旧格式每行一个词,新格式每行一个词加一个来源标记。若来源标记只是附加信息,映射后去重键仍用词本身即可;若来源标记会改变词的含义,去重键就必须改成词加来源,否则会把不同实体合并。这个例子只用于说明比较方法,不代表任何实际工具的处理结果。
有三种情况应优先检查上游,而不是改规范。其一,格式变化只发生在导出环节,原始对象未变,此时应修导出配置。其二,变化只影响非关键字段,且这些字段不参与去重和分组,可以暂不处理,但要在规范里标注为忽略字段。其三,变化来自临时采样或测试数据,应等数据稳定后再决定,避免为一次性格式调整规范。
适用条件是:你能够拿到新旧两批可对比的对象,并且知道旧规范的去重键和分组规则。若拿不到旧对象,只能先按新对象重建一版规范,并明确标注它未经回归验证。涉及具体工具时,其字段名、导入入口和校验规则需要以该工具当前文档为准,不同工具对同一格式的处理可能不同。动作上,先做一次小规模映射比对,再决定是改映射还是重建规范,比直接全量重写更可控。