先判断旧格式里哪些字段仍然能对上工具的语义,再决定保留、改写还是退出。常见误区是直接把旧输入整体丢给新格式,结果工具能跑完,但对象含义已经错位。真正需要改的不是分隔符,而是对象粒度、标识方式和空值约定这三处。
工具支持的对象格式变化,通常发生在三个层面:一是字段顺序和分隔符,二是对象粒度,三是指标口径。前两者是输入规范问题,后者是解释问题。如果只是分隔符从逗号变成制表符,改一行映射就能恢复;如果对象从“词”变成“词加地区”,旧数据里没有地区字段,任何补全都是猜测。
判断方法很简单:拿一条旧记录,逐字段问它在新格式里对应什么。对不上的字段如果影响查询结果的含义,就必须改写或退出;只影响排版的对不上,可以保留旧值,在输入层做转换。
当旧格式的每个字段在新格式里都有同义位置,且空值含义一致时,保留是成本最低的选择。例如旧系统把查询词和匹配类型写在两列,新格式把它们合并成一个带修饰符的字符串,只要修饰符规则明确,就可以保留原始词表,只在输入前拼接。
保留的前提是能写出可逆的映射。做法是抽十条旧记录手工转换,再反向解析回旧格式,看是否与原值一致。如果反向解析丢失了大小写、空格或特殊符号,说明保留会引入静默错误,应改为改写。
保留动作的结果会影响下一步:映射可逆时,可以把转换脚本固化到输入管道,后续只维护词表;不可逆时,需要回到数据源补字段,而不是在输入层打补丁。
改写适用于旧对象仍有价值、但需要重新表达的情况。典型场景是旧格式以“词”为对象,新格式要求“词加意图分类”;或者旧格式用自增编号标识对象,新格式要求稳定字符串标识。
改写不是重命名,而是重新建立对象边界。操作上先定义新格式的最小对象,再把旧记录拆解或合并到该粒度。拆解会产生一对多,需要决定是否保留父子关系;合并会产生多对一,需要决定冲突值取哪一个。这两个决定都要记录在输入规范里,否则不同人执行会得到不同结果。
假设一个短例子:旧表有“查询词、月搜索量”两列,新格式要求“查询词、地区、月搜索量”。如果旧表没有地区列,改写时不能默认填全国,而应把该字段留空并标记为待补。留空和填默认值在后续聚合中含义不同,这一步做错,后面所有比较都不可信。
退出不是失败,而是当旧字段在新格式里没有对应概念时的正确选择。例如旧格式记录的是人工标注的类别,新格式只接受工具自动分类,两者不是同一口径,强行映射会把人工判断伪装成工具输出。
退出的判断依据是:该字段是否参与结果解释。如果它只用于内部备注,可以不进入新输入;如果它影响查询结果的筛选或分组,就必须退出该批数据,重新采集符合新口径的对象。
退出动作的结果是缩小输入范围,但保留了输入规范的可解释性。下一步应把退出原因写进规范,说明哪些旧对象不再接受,避免后续有人用旧数据补量。
这三件事固定后,格式变化就从一次性迁移变成可重复的输入转换。后续再遇到工具支持的对象格式调整,只需判断新变化落在哪一层,再决定保留、改写还是退出。