结论先说:如果新对象格式只是字段顺序或分隔符变化,改输入规范时应当保留原有字段语义映射,只替换解析层;如果新格式改变了对象的粒度(例如从账户级变成计划级,或从单值变成多值),则必须重建输入规范,不能只做格式转换。下面给出判断依据、一个会让结论失效的反例,以及可以立刻执行的动作。
把“对象格式”拆成三个可分别检查的层面,比笼统地说“格式变了”更容易做决定:
2024/01/05变成2024-01-05、字段顺序调整。这类变化只影响解析,字段含义没变。只有表示层变化时,改输入规范的成本低,通常改一处解析规则就能继续用。粒度层或语义层变化时,继续沿用旧规范会把错误数据喂给下一步,此时应当停下来重建规范,而不是急着让流程跑通。
决定重建规范时,不要整份推翻。先固定不随格式变化的部分,再替换随格式变化的部分:
这样做的结果是:格式迁移的影响被限制在输入层,已经验证过的下游处理不用重新验证。如果连下游动作也要改,说明这次变化已经超出格式范畴,应按新流程重新设计。
假设旧格式是一行一个账户,包含账户标识和日预算;新格式是一行一个计划,包含计划标识、所属账户和日预算。表面上字段都能对上,但按账户汇总预算时,旧规范默认“一行即一个账户”,新数据里同一个账户会出现多行。此时只改分隔符和字段顺序,汇总结果会重复计算或漏算。
这个反例说明:当新格式让同一对象的行数不再固定时,“只改解析层”的结论不成立,必须增加按对象标识去重或分组的规则,并明确汇总口径是按行还是按对象。判断方法很简单——用同一批对象分别按旧规范和新格式各跑一次,比较对象数量和汇总值;数量或汇总值不一致,就属于粒度层变化,不能只改解析。
格式变化常和旧系统、旧合作关系退出同时发生。这时输入规范要区分两类对象:仍然有效的和准备退出的。建议在规范里增加一个显式的状态字段,而不是靠格式本身暗示:
动作上,先冻结旧规范的输入,把历史数据按原样归档,再用新规范处理新数据。这样做的结果是,退出过程中的对象不会因为格式切换而丢失标识,后续需要核对时还能对上。如果直接把旧数据按新规范重解析,缺失字段会被填成默认值,反而破坏可追溯性。
先做一次小范围对照:取一批同时存在于旧格式和新格式中的对象,按上述映射表分别解析,比较对象数量、关键字段取值和汇总结果。三者一致,说明可以只改解析层并继续;出现不一致,按不一致的字段定位属于粒度层还是语义层,再决定是否重建规范。
验证通过后,把新规范写成带必填项和取值范围的校验规则,并记录本次变化的判断依据,方便下次格式再变时对照。具体工具当前支持哪些字段和取值,需要以实际拿到的数据或官方说明为准,不要凭旧经验推断。