先按“业务是否仍在用、数据能否重建、迁移成本是否可控”三条线给字段分级,再决定保留、改写还是退出;不要因为字段迁不过去就整体回退旧系统,也不要为了迁而迁,把已经死掉的数据一起搬进新库。
字段无法完整迁入,通常不是单一原因。常见有四类:旧库字段类型与新库不兼容,比如旧系统用自由文本存日期,新库要求标准时间格式;旧字段依赖某个已停用的模块,数据本身还在但业务入口没了;旧字段是历史遗留的拼装字段,一个输入框里塞了姓名、电话、备注;还有一类是旧系统里存在大量空值或占位符,实际有效数据很少。
这四类的处理方向完全不同。类型不兼容通常可以改写,依赖消失的字段要判断业务是否还需要,拼装字段需要拆解后分别落位,空值居多的字段则优先考虑退出。先定位原因,再决定保留项,比直接列一张“必须迁”的清单更省事。
保留适用于字段仍在业务流程中被读写、且新系统有对应承载位置的情况。判断依据不是“历史上存过”,而是“最近一段时间还有没有新数据写入、有没有页面或报表在读取”。如果一个字段只是躺在旧库里,没有任何入口产生新值,也没有任何展示或导出用到它,保留的意义就很低。
改写适用于字段语义还在、但形态需要调整的情况。典型是拼装字段拆成多个独立字段,或者旧编码值需要映射到新字典。改写的前提是能拿到完整的映射规则,并且旧数据里没有大量无法归类的脏值。如果映射规则本身模糊,改写会把问题从迁移阶段推迟到使用阶段。
退出适用于字段对应的业务已经终止、数据可由其他字段推导、或者保留成本明显高于收益的情况。退出的前提是先做一次归档,把原始数据以可读形式留存在旧库或导出文件中,而不是直接删除。退出不等于丢弃,而是不再让它进入新系统的日常结构。
不要凭印象决定。可以按下面几个信号给每个字段打标:
这组信号的作用是让分歧可见。团队里有人说“这个字段很重要”,往往指的是历史上重要;用写入和读取两个动作去核对,结论会具体很多。
假设旧系统有一个“联系人信息”字段,里面混着姓名、电话和备注,用分隔符隔开。新系统要求姓名、电话、备注各自独立。直接整体保留,新系统里会多出一个无法参与检索和校验的杂项字段;直接退出,又会丢掉备注里可能存在的有效信息。
可行的做法是先写一段解析规则,把能稳定拆出的姓名和电话分别落位,拆不出的部分整体进入一个“历史备注”字段,并标记来源。解析完成后统计拆解成功率:如果大部分记录能拆开,说明改写路线成立;如果大量记录格式混乱、拆解后反而产生错误归属,就应把整个字段转为只读归档,不进入新系统的业务字段,只在新系统里保留一个指向归档记录的说明。这个动作的结果会直接影响下一步——拆解成功率高,就继续做字段校验和去重;成功率低,就停止逐条清洗,改为整批归档,把精力放到新数据的录入规范上。
定档只是中间步骤,真正影响后续的是三件事:为保留字段确认新库的承载位置和校验规则;为改写字段准备映射表并抽样验证;为退出字段执行归档并记录归档位置和恢复方式。做完这三步,再进入正式迁移,迁移过程中出现的字段报错才有明确的处理依据,而不是每次都要重新讨论一遍去留。
如果迁移工具报出的错误集中在少数几个字段上,优先处理这几个字段的定档,而不是整体重跑。整体重跑往往只是把同样的错误再报一次,不会改变字段本身的归属判断。