先判断格式变化影响的是“输入层”还是“映射层”:如果新格式只是字段顺序或分隔符变了,改输入规范即可;如果字段含义、层级或必填项变了,必须先改映射规则,再改输入规范。否则你只是把旧数据塞进新壳,任务能跑但结果会静默错位。
假设你有一套任务,长期读取一张两列 CSV:第一列是查询词,第二列是目标页面。现在上游把交付格式换成 JSON,每个页面对象下挂一组查询词,还多了语言和优先级字段。任务没有报错,但输出里查询词和页面开始错配。这个情境用来演示判断顺序,不代表任何具体工具的现状。
此时不要急着改解析代码。先回答一个问题:新格式里“一个查询词对应几个页面”是否还成立?如果变成多对多,输入规范就不能再假设一行一关系,必须引入唯一标识,让每个查询词和页面各自有稳定 ID,再在映射层建立关联。这是格式变化里最容易被忽略的一步。
把变化拆成三类,处理方式完全不同:
判断依据可以很具体:拿新旧两份样本各跑一次解析,对比同一业务对象的字段值是否一致。如果值一致只是位置不同,属于语法变化;如果值对不上,属于语义或结构变化。
假设确认是结构变化,按下面顺序操作:
第 3 步的结果直接决定下一步:如果出现孤儿记录,说明输入规范还没覆盖新格式的全部关系,此时改任务配置没有意义,应回到第 2 步补齐字段定义。如果校验通过但回归不一致,问题多半在映射层,而不是输入规范。
只有同时满足以下条件,才可以不动映射层:新格式仍保持一对一关系;字段含义与旧格式逐项对应;必填项没有增减;排序不影响业务含义。四条里有一条不成立,就应该按结构或语义变化处理。
反过来,如果新格式增加了可选字段,而你的任务只用到旧字段,可以暂时忽略新字段,但要在输入规范里显式声明“忽略未知字段”,避免解析器因严格模式直接失败。这个声明本身也是规范的一部分。
格式变化往往反复发生。建议在输入规范里保留一段变更记录:每次格式调整写清变更类型、影响的字段、以及是否需要重跑历史任务。这样下次再遇到类似变化,可以直接对照类型决定动作,而不必重新推断。规范里还应写明样本数据的存放位置和校验命令,让接手的人能复现判断过程,而不是依赖某个人记得旧格式长什么样。
最后提醒一点:如果涉及具体品牌工具的字段命名、导入入口或当前支持的结构,需要以该工具当时的官方文档为准,本文只提供通用的判断顺序,不对任何未核实的现行功能作断言。