先给结论:不要直接把新格式的样本丢进旧规则里跑一遍,而是把“对象格式”拆成结构、字段、取值、边界四层,逐层判断哪些规则仍然成立、哪些必须重写。旧规则在个别样本上通过,不代表规模化后不会出现例外;只有把例外写成可判定的条件,输入规范才算真正改完。
假设你原来处理的是一批纯文本页面清单,每行一个地址,工具读取后直接进入后续流程。现在对象换成了带层级结构的导出文件,字段更多,还可能出现同一对象对应多条记录的情况。此时旧规范失效通常不在“读取”这一步,而在下面四层中的某一层:
判断方法很简单:拿旧规范去套新对象,把每一处“靠默认行为通过”的地方标出来。这些地方就是需要重写的候选,而不是可以沿用的部分。
以读者手里的一份新格式导出文件为例,按以下顺序处理,每一步都产出下一步能用的东西:
这套动作的结果是:你得到一份新的输入规范,而不是一段临时清洗脚本。规范改完后,下一步才是决定用工具内置能力处理,还是在外层先做一次转换。
样本通过而批量失败,常见原因有三类,区分它们能帮你决定改规范还是改流程:
需要提醒的是,某次处理量下降、抓取量归零或某字段为空,都不能单独证明规范改对了。它也可能是上游导出范围变化、过滤条件收紧或对象本身减少造成的。要区分这些解释,至少再核对一次上游数据量和失败记录的分布。
假设旧规范是“每行一个地址,重复行自动去重”。新对象变成“一个地址对应多条带日期的记录”。如果直接沿用旧规则,去重会把同一地址的不同日期记录合并成一条,导致后续按日期比较时丢失信息。
改成新规范时,可以规定:以地址加日期作为唯一键;同一键下若出现多条记录,保留状态为有效的那条;状态全部无效时整组拒绝并输出到待查清单。这个假设例子的重点不是具体字段名,而是把“去重”从行级改成键级,并明确冲突时的取舍。动作的结果是:原本被静默合并的记录进入待查清单,你可以据此决定是回到上游修正导出,还是调整匹配键。
规范改完不等于可以直接全量跑。先做三件事:用最小样本验证结构层和字段层;用一批包含已知异常的数据验证边界层;用同一份数据跑两次,确认结果一致。任何一次结果不一致,都说明还有默认行为没被写进规范。
最后,把新规范里“必须核对”的部分标出来,例如具体工具对编码、空值和重复键的处理方式。这类信息会随工具版本变化,不能凭旧经验断言,需要在使用前对照当前说明确认。