先给结论:如果旧格式仍能稳定产出你要的字段,就保留旧输入并加一层转换;如果旧格式已经导致字段错位、漏查或需要人工逐条修补,就改写输入规范,而不是继续迁就。判断依据不是格式新旧,而是同一批对象在两种输入下产出的可比性。
对象格式变化通常发生在三个位置:分隔符、字段顺序、字段本身含义。分隔符变化只影响解析,改写成本低;字段顺序变化会让列与列对不上,属于结构性风险;字段含义变化最麻烦,例如原来一个字段放词,现在放的是词加地域限定,输入规范必须重新定义每个位置的语义。
一个可执行动作:取二十条新旧格式都有的对象,分别跑一次,把结果按对象逐条对齐。如果对齐后只有少量空值,说明是解析层问题;如果同一个对象在不同输入下返回不同结果,说明字段语义已经变了,此时保留旧格式只会把错误带进后续汇总。
保留旧输入成立的前提是:旧格式仍是上游系统的稳定输出,且你已经有可复用的清洗脚本或映射表。这种情况下,新增一层转换比改动全链路更省事,代价是维护两套映射,一旦上游再改一次,转换层要跟着改。
保留还有一个隐性代价:输入规范会逐渐和实际对象脱节。转换层能掩盖字段错位,但不会告诉你哪些对象被静默丢弃。因此保留旧输入时,必须同时保留一份丢弃清单,记录哪些对象没有被成功解析,以及丢弃原因。没有这份清单,后续排查会失去线索。
当字段含义发生变化,或者旧格式需要人工逐条修补才能用,改写输入规范更合理。改写的核心不是把新格式直接塞进查询框,而是先定义一份中间规范:规定哪些字段必填、哪些可选、缺失时如何标记、多值用什么分隔。中间规范定下来之后,新旧格式都向它靠拢,而不是让查询工具去适配每一种上游格式。
改写的代价是前期要重新校验历史数据。一个假设例子:假设你有三批对象,分别来自不同上游,字段顺序各不相同。如果直接按新格式改写,前两批需要重新映射;如果先定中间规范,三批都只映射一次。这个比较只用于说明映射次数差异,不构成对任何工具能力的判断。
出现以下信号时,继续保留旧格式的收益已经低于成本:同一对象在两次查询中字段位置不一致;空值集中在某个字段而不是随机分布;清洗脚本的例外分支数量超过主流程;每次上游更新都要人工核对映射表。
这些信号单独出现不足以证明必须退出,因为空值也可能来自对象本身缺失,字段位置不一致也可能来自导出环节。要区分原因,可以把同一批对象分别用新旧输入各跑一次,比较差异对象的分布。如果差异集中在某类对象上,说明是格式问题;如果差异随机分布,更可能是数据源波动。
这套顺序的作用是让下一步有依据:如果差异集中在解析层,继续保留旧输入并补转换即可;如果差异已经进入语义层,改写输入规范才是止损动作,否则后续每次汇总都要重新解释字段含义。