2、数据迁移之殇:历史数据清洗与导入的常见陷阱与应对策略
数据迁移这事儿,我做了十几年,每次碰到都觉得头疼。
说白了,ERP系统上线,最怕的不是功能不会用,而是旧系统的数据搬不过来。你想想看,一个企业跑了七八年的老系统,里面什么妖魔鬼怪都有。我见过最夸张的一次,客户说他们的数据很干净,结果一检查,光客户编码就有一千多条重复的。
嗯,今天咱们就聊聊数据迁移里那些坑,以及我是怎么填坑的。
陷阱一:数据质量评估走过场
很多项目组觉得,数据迁移嘛,写个脚本导过去就行了。我一开始也这么想,直到有一次吃了大亏。
那是个制造业客户,老系统用了十年。我们按计划做了数据抽样,抽了5%的数据,看起来还行。结果全量迁移的时候,发现物料编码里混着全角半角字符,有的带空格,有的带特殊符号。导入新系统直接报错,整个项目延期了两周。
具体怎么做?我一般分三步走:
- 第一步:字段完整性检查——必填字段有没有空值?比如客户名称、物料编码,这些空了后面没法玩。
- 第二步:格式一致性检查——日期格式统一了吗?电话号码带不带区号?金额字段有没有千分位逗号?
- 第三步:业务逻辑校验——比如订单的金额和明细加起来对不对?库存数量和出入库记录能不能对上?
陷阱二:历史数据清洗过度
这个坑很有意思。有些团队特别认真,想把历史数据洗得干干净净。结果呢?洗了三个月,项目黄了。
我曾经遇到一个客户,财务模块的数据有五年,他们想把每一笔凭证都核对清楚。我一看,光差异就有两千多条,每条都要找原始单据确认。这要是全做完,半年都搞不定。
我一般会画一个矩阵:
| 数据类型 | 清洗要求 | 容忍度 |
|---|---|---|
| 主数据(客户/物料/供应商) | 严格清洗 | 0% 错误 |
| 期初库存/余额 | 严格核对 | 0.1% 以内 |
| 历史交易明细 | 抽样核对 | 1% 以内 |
| 日志/操作记录 | 直接迁移 | 不校验 |
陷阱三:导入顺序搞反了
这个错误我犯过一次,印象特别深。
当时急着赶进度,我先导了销售订单,再导客户主数据。结果订单里引用的客户编码,在新系统里根本不存在。导入失败不说,还得回滚重来。
为什么会这样?因为ERP系统里数据是有依赖关系的。你想想看,没有客户,哪来的订单?没有物料,哪来的BOM?
正确的导入顺序应该是:
- 第一步:基础主数据——客户、供应商、物料、会计科目。这些是地基。
- 第二步:结构数据——BOM、工艺路线、价格表。这些依赖主数据。
- 第三步:期初数据——库存余额、应收应付、总账余额。
- 第四步:历史交易——未结订单、在途采购、未清票据。
一个小技巧: 我每次做导入前,都会画一张依赖关系图。哪个表引用了哪个字段,清清楚楚。然后按依赖顺序写脚本,先导没有外键依赖的,再导有依赖的。这样基本不会出乱子。
陷阱四:没有做增量验证
很多团队喜欢一次性全量导入,然后对比总数。总数对上了,就觉得没问题了。
我告诉你,这不够。总数对得上,不代表每一条都对得上。我遇到过总数差了一分钱,查了三天才发现是四舍五入的问题。
我现在的方法是:
- 分批次导入——每次导1000条,验证一批,再导下一批。
- 逐字段对比——不光看总数,还要随机抽几条,把每个字段的值都对比一遍。
- 业务场景测试——导完数据后,跑一遍业务流程。比如导完客户数据,马上试一下能不能下订单。导完库存,试一下能不能做盘点。
陷阱五:忽略了编码映射
这个坑最隐蔽,也最致命。
老系统的物料编码可能是"ABC-001",新系统要求改成"MAT-0001"。看起来只是改个格式,但所有引用了这个编码的地方都要改——BOM、订单、库存、价格表……
我曾经帮一个客户做编码映射,光映射表就写了三千多行。而且有些编码在老系统里是重复的,映射到新系统时,一个编码对应了多个物料。这种问题,脚本跑不出来,只能人工一条条核对。
我的应对策略:
- 提前建立映射表——在导入前,把所有新旧编码的对应关系整理好,存成Excel或数据库表。
- 做交叉验证——比如物料编码映射后,检查一下对应的BOM是不是也映射对了。
- 留好回退方案——万一映射错了,能快速回退到旧编码。
一个小工具: 我习惯用Python写一个映射校验脚本。输入新旧编码对照表,自动检查有没有一对多、多对一的情况。跑一遍,所有问题一目了然。
总结一下
数据迁移这事儿,说白了就是细心活。我做了这么多年,每次上线前还是紧张。但只要你把上面五个陷阱都防住了,基本不会出大问题。
最后送大家一句话:数据迁移没有捷径,只有笨办法——多检查一遍,多验证一次,多留一个心眼。
嗯,今天就聊到这儿。下一章咱们聊聊系统切换的那些事儿,到时候见。