项目类型: 技术深度类 | 展示 SQL 专家能力与业务理解 所属公司: 河南九州通医药有限公司 项目时间: 2022 年 6 月 - 2022 年 12 月(7 个月) 项目角色: 应用侧核心执行者(负责数据清洗与业务逻辑验证)

一句话项目概述

在 ERP 系统架构从 v2 升级到 v3 的关键窗口期,作为应用侧核心技术成员,通过编写复杂 SQL 脚本完成千万级历史数据的逻辑清洗,确保新旧版本数据一致性 100%,支撑平滑上线零事故。

项目背景 (Situation)

业务背景

河南九州通(年营收 150 亿 + 的医药流通企业)推行 ERP 核心架构升级,从 v2 版本升级到 v3 版本。新版本引入多业务实体 (OU)库存组织 (IO) 的强财务隔离架构,底层数据结构发生质变。

技术挑战

  1. 数据结构重构: 原 v2 版本的平铺式数据结构,在 v3 中变为多层级架构,数据迁移复杂度极高
  2. 历史数据脏数据: 多年积累的 ERP 数据中存在大量逻辑错误(无主库存、未核销负数、借贷不平凭证等)
  3. 合规高压: 若带着脏数据迁移,将导致新系统 ” 财务账实不符 “,构成严重的财务合规风险

核心痛点

  • 预检测评发现500+ 条深层逻辑错误数据
  • 数据量千万级,人工修正不现实
  • 升级窗口期固定,不能影响日常业务

项目目标 (Task)

核心 KPI

  1. 数据质量: 清洗所有逻辑错误数据,新旧版本财务/库存数据一致性100%
  2. 平滑切换: 升级切换期间零重大业务事故(P0 级)
  3. 知识沉淀: 输出可复用的数据校验脚本和问题处理文档

个人职责边界

  • 负责应用层数据一致性校验与清洗
  • 负责业务逻辑验证与穿测
  • 协助制定切换方案与应急预案

关键行动 (Action)

阶段一:数据清洗工程(核心技术工作)

1. 脏数据诊断与分类

  • 编写诊断 SQL 脚本,扫描千万级历史数据,定位逻辑错误类型
  • 将脏数据分类为:无成本库存、孤立单据、借贷不平凭证、重复数据等 6 大类

2. 清洗脚本开发

-- 示例:清洗无主库存数据
-- 通过多表关联查询,找出库存记录中无对应入库单的异常数据
SELECT
    inv.item_id,
    inv.quantity,
    inv.warehouse_id,
    inv.cost_amount
FROM inventory inv
LEFT JOIN receipt_transactions rt
    ON inv.transaction_id = rt.transaction_id
WHERE rt.transaction_id IS NULL
  AND inv.quantity <> 0
  AND inv.created_date < TO_DATE('2022-01-01','YYYY-MM-DD');
 
-- 根据业务规则,将这些数据与历史单据进行逻辑匹配修复
-- 或标记为待处理,由业务部门确认后处理

3. 批量修复执行

  • 编写修复 PL/SQL 存储过程,自动化修正 100000+ 条脏数据
  • 对于无法自动修复的数据,生成《待人工确认清单》提交业务部门
  • 修复后再次执行诊断脚本,确保清洗完整性

关键技术点

  • 复杂 SQL:多表关联查询、子查询、分析函数(ROW_NUMBER, LAG/LEAD)
  • 事务控制:COMMIT/ROLLBACK 确保数据一致性
  • 性能优化:通过索引优化、分批处理避免长事务锁表

阶段二:业务逻辑验证(全链路穿测)

1. 测试环境搭建

  • 在沙箱环境中,使用清洗后的数据构建 v3 测试环境
  • 协助 DBA 团队完成数据迁移和配置同步

2. 核心业务流程穿测 组织业务骨干进行P2P(采购到付款)O2C(订单到收款) 全流程测试:

  • 采购订单→入库→应付核销→付款
  • 销售订单→出库→应收核销→收款

3. 差异化问题处理

  • 重点验证新架构下的权限隔离(OU 级别权限)
  • 重点验证自动记账逻辑(成本计算规则变化)
  • 输出《v3 版本操作差异手册》,降低一线人员操作风险

阶段三:上线保障(分级响应)

1. 切换方案制定

  • 参与制定《升级切换方案》与《应急回退预案》
  • 明确切换时间窗口、数据备份策略、回退触发条件

2. 现场值守

  • 升级上线当周实施7×24 小时现场值守
  • 设计 ” 分级响应通道 “:P0 级(业务中断)→15 分钟响应;P1 级(功能异常)→30 分钟响应

3. 快速问题修复

  • 准备常见问题的 SQL 快速修复脚本
  • 对接基础设施团队,确保底层数据库/网络稳定

量化成果 (Result)

核心成果

  1. 数据质量达标:

    • 精准定位并修正500+ 条深层脏数据
    • 新旧版本数据一致性校验100% 通过
    • 彻底消除迁移 ” 地雷 “,避免财务合规风险
  2. 平滑上线:

    • ERP v3按期上线,升级窗口期无 P0 级重大业务事故
    • 日常业务流程正常流转,未出现大规模操作阻塞
  3. 资产沉淀:

    • 编写的数据校验脚本库(包含诊断/修复/验证脚本)
    • 输出的《常见报错速查表》与《v3 差异操作手册》
    • 被集团 IT 部门推广至其他省公司,作为 ERP 升级标准工具

个人价值体现

  • SQL 技术专家: 展示了复杂数据清洗、性能优化、事务控制的深厚功底
  • 业务理解深度: 能够将财务/库存业务规则转化为 SQL 逻辑
  • 风险控制意识: 提前发现并消除数据质量风险,保障财务合规

技术栈清单

类别具体技术
数据库Oracle Database 11g, PL/SQL
核心技能复杂 SQL 查询(多表关联、子查询、分析函数), 存储过程, 事务控制, 性能优化
ERP 系统Oracle ERP(P2P/O2C 模块业务逻辑)
工具PL/SQL Developer, Toad for Oracle, Excel(数据分析)

面试准备:常见问题与应对

Q1: 你在这个项目中具体做了什么?

回答要点

” 我作为应用侧核心执行者,主要负责三块工作:第一,数据清洗,通过编写复杂 SQL 脚本,扫描千万级数据,定位并修复 500 多条逻辑错误;第二,业务验证,组织业务人员进行采购到付款、订单到收款的全流程穿测;第三,上线保障,制定应急预案并现场值守。最终确保了升级零事故。“

Q2: 数据清洗遇到最大的技术难点是什么?

回答要点

” 最大难点是无主库存数据的追溯匹配。这些库存记录因为历史原因丢失了入库单关联,但又有实际库存和成本。我通过编写复杂的 SQL,基于商品批次、时间戳、仓库等维度,与历史采购订单进行模糊匹配,成功修复了大部分数据。对于无法自动匹配的,我生成清单交给业务确认后手动修正。“

Q3: 如何保证 SQL 脚本的准确性和安全性?

回答要点

” 我采用了三步法:第一,先在测试环境反复验证,确保逻辑正确;第二,在生产环境执行前,先用 SELECT 查询预览影响范围,让业务确认;第三,使用事务控制,先执行修改但不 COMMIT,人工检查结果无误后再提交。同时做好数据备份,确保可以回滚。“

Q4: 这个项目对你后续工作有什么帮助?

回答要点

” 这个项目让我深刻理解了 ERP 系统中业务流和数据流的关系,培养了数据驱动的思维方式。后来转岗做基础设施时,我依然沿用这种 ’ 用数据说话 ’ 的方法进行容量规划、性能分析。而且这段经历让我明白,技术人员不能只懂技术,必须深入理解业务,才能真正解决问题。“

可能的追问点与应对策略

追问 1: “500 条脏数据是怎么统计出来的?”

准备答案

  • 通过诊断 SQL 脚本扫描全量数据
  • 按错误类型分类统计(无主库存、借贷不平、孤立单据等)
  • 生成《脏数据明细清单》提交给业务确认

追问 2: ” 如果上线后还是出现数据问题怎么办?”

准备答案

  • 我们制定了分级应急预案
  • P0 级(业务中断):立即回滚
  • P1 级(数据错误):快速修复脚本处理
  • 准备了常见问题的 SQL 修复脚本库

追问 3: ” 你们的测试覆盖率如何保证?”

准备答案

  • 核心业务流程 100% 穿测(P2P/O2C)
  • 高频操作场景重点验证(如月结、盘点)
  • 新旧版本对比测试,确保结果一致

追问 4: ” 你觉得这个项目最大的收获是什么?”

准备答案

  • 技术上:SQL 能力提升,能够处理复杂的数据清洗场景
  • 业务上:深入理解了医药行业的财务/库存管理规则
  • 工作方法上:学会了在高压环境下,如何做好风险控制和应急准备

项目亮点提炼(电梯演讲版 -30 秒)

” 在 ERP 系统从 v2 升级到 v3 的关键项目中,我负责应用层的数据清洗和业务验证。面对千万级历史数据中的 500 多条逻辑错误,我通过编写复杂的 SQL 脚本实现了自动化清洗,确保了新旧系统数据一致性 100%。最终项目按期上线,升级窗口期零重大事故。这段经历让我深刻理解了数据治理的重要性,也培养了数据驱动的工作方式。“

适用场景

推荐在以下情况使用此项目

  • ✅ 应聘需要SQL 能力的岗位(数据分析、数据工程、运维开发)
  • ✅ 面试官关注业务理解能力(不只是纯技术)
  • ✅ 公司有ERP/SAP 等企业级系统(容易产生共鸣)
  • ✅ 岗位 JD 提到数据治理、数据质量等关键词

不推荐在以下情况使用

  • ❌ 纯互联网/云原生公司(可能觉得 ERP 太传统)
  • ❌ 强调 DevOps/SRE 自动化的岗位(此项目偏手工)
  • ❌ 面试时间紧张,想快速展示技术广度(此项目讲述需 5-10 分钟)