先给结论:如果新格式只是把同一批对象换了一种写法,优先改写输入规范;如果新格式改变了对象的含义或粒度,应该退出原流程,重新定义查询对象;只有在旧格式仍被工具接受、且新旧对象能一一对应时,才值得保留旧输入。判断依据不是格式看起来像不像,而是改写之后每个输入还能不能唯一对应到你想查的那个对象。
关键词指数查询的输入对象通常包含三层信息:对象标识、对象范围和查询条件。格式变化可能只动第一层,比如标识从一串数字变成带前缀的字符串;也可能动第二层,比如原来按整站查,现在只能按栏目查;还可能动第三层,比如原来可以一次传入多个条件,现在只接受单个条件。
只动第一层时,改写成本最低。你可以写一个映射规则,把旧标识转换成新写法,再批量替换输入。动到第二层或第三层时,改写往往只是表面成功:工具接受了输入,返回的却是另一个粒度的结果。这时继续改写会把错误藏进流程里,后面越难发现。
一个可操作的检查动作是:拿三到五个旧对象,分别用旧写法和新写法各查一次,对比返回对象的名称、范围和层级。如果三次对比里有一次对不上,就不要急着批量改写,先确认这个差异是格式问题还是对象定义问题。这个动作的结果直接决定下一步是写映射脚本,还是回到需求侧重新定义要查什么。
保留旧输入规范,意思是继续用原来的写法提交,不改动上游的采集或整理环节。它成立需要同时满足几个条件。
保留的代价是技术债。你省下了改写和验证的时间,但每次工具调整格式,都要重新确认旧写法是否还有效。如果这条查询链路只是临时用几周,保留是合理的;如果它要长期跑,保留通常只是把问题推迟。
改写适合格式变了但对象含义没变的情况。做法不是直接改脚本,而是先把映射关系写成一张对照说明:旧字段是什么、新字段是什么、转换规则是什么、哪些值无法自动转换。
无法自动转换的值最值得关注。比如旧标识里有一部分是人工补的,新格式里没有对应位置,这类对象就不能靠规则批量处理,需要单独列出并人工确认。把这份清单交给执行的人,比直接给一个跑完的脚本更有用,因为对方能看出哪些结果是可信的,哪些需要复核。
改写完成后,至少做一次抽样回查:从改写后的输入里抽若干对象,用新格式重新查一遍,确认返回对象和预期一致。抽样数量不需要很大,但要覆盖之前无法自动转换的那部分。如果这部分对不上,说明映射规则还不完整,应该先补规则,而不是先扩大批量。
退出不是失败,而是承认旧流程的假设已经不成立。出现下面这些信号时,继续改写通常只会增加维护成本。
退出时要做的是重新定义查询对象,而不是换一个工具继续套旧流程。先写清楚这次要查的对象是什么、范围到哪里、需要哪些条件组合,再去看新格式能不能表达这些要求。如果新格式表达不了,就要考虑调整需求本身,或者把这项查询拆成几个能分别完成的部分。
假设原来的输入是一个整站标识,工具返回整站的指数;新格式只接受栏目标识,返回的是各栏目的指数。表面看只是输入变细了,但两者不是同一层对象。
如果业务只需要一个总量,理论上可以把栏目结果相加。但相加成立的前提是栏目之间不重叠、且覆盖完整。实际中栏目可能互相包含,也可能有内容不属于任何栏目,直接相加会偏高或偏低。这时正确做法不是写一个求和脚本,而是先确认总量是否还需要,如果需要,就找能直接返回总量的输入方式;如果不需要,就把需求改成按栏目分别查看,并接受不能再得到一个整站总量。
这个例子里,动作是先验证栏目之间是否重叠,再决定求和还是改需求。验证结果决定后续是保留求和逻辑,还是放弃总量这个指标。
无论选择保留、改写还是退出,都应该把判断条件和适用范围写进输入规范文档,让下一个接手的人知道为什么这样处理。规范里至少写清楚:当前使用的对象格式、格式变化时的判断步骤、无法自动转换时的处理方式、以及什么情况下必须停下来重新确认需求。
这样做的直接结果是,格式再变时不需要从零讨论,而是按已有条件逐条核对。核对不通过的那一条,就是这次要重新决策的地方。