结论先说:只有当“新格式”仍能无损映射到原有字段语义时,才可以直接沿用旧输入规范;一旦新格式把原来的一个字段拆成多个、或把多个字段合并成一个,旧规范就必须重写,否则个别样本能跑通、规模化后必然出现例外。判断依据不是样本是否成功,而是字段的一对一关系是否被破坏。
把变化分成三种,处理方式完全不同:
只有第一种可以低风险沿用。后两种如果继续套旧规范,典型表现是:前几十行看起来正常,量一大就出现对象错位、字段串行或重复计数。
假设一份输入前 50 行恰好每个对象只有一个子项,那么“按行处理”的旧规范仍然能得到正确结果。这会造成一种错觉:格式没变,规范不用改。
但真实数据里,一个对象可能对应多个子项。此时按行处理会把同一个对象的后续行当成新对象,于是出现两类可区分的证据:一是对象总数明显多于预期的主对象数;二是同一标识符在结果里重复出现,且每次携带不同的子项值。
这两个信号指向的是同一个原因——对象边界定义错了,而不是数据源本身有问题。反过来,如果对象总数与预期一致、只是个别字段为空,那更可能是字段映射问题,不必推翻整个输入规范。
正确的顺序是:
一个实际动作:在正式导入前,先用一份包含“单子项对象”和“多子项对象”混合的测试数据跑一遍,检查对象总数是否等于主对象去重后的数量。如果不等,说明边界定义还需要调整,此时不要继续往下做字段清洗——因为字段清洗建立在错误的边界上,返工成本更高。
存在一个反例:如果新格式来自上游系统,而该系统的对象粒度本身就与你的分析目标不一致,那么修改输入规范只是把问题往后推。例如你的目标是评估页面级表现,但新格式只提供查询词级记录,且没有稳定的页面标识。这种情况下,无论怎么改解析规则,都无法还原页面级对象。
此时正确的动作是回到上游,要求补充页面标识字段,或者明确接受分析粒度降级为查询词级。继续在旧规范上打补丁,只会得到看似完整、实际不可用的结果。
改完规范后,用同一份数据分别按新旧规范各跑一次,对比三件事:对象总数、每个对象的子项数量分布、以及抽样对象的字段完整性。如果新规范下对象总数下降、子项分布更符合预期,说明边界修正生效。如果只是字段报错减少但对象总数没变,那多半只改了字段映射,没解决边界问题,需要回到上一步重新检查对象定义。