当前位置: 首页 > news >正文

迁移实战派01:ETL迁移基础知识-思路和规划


迁移实战派01 ETL迁移基础知识-思路和规划

一、迁移总体思路:遵循“先结构,后数据,再校验”的铁律

数据迁移就像盖楼,得先打地基(建表结构),再往上砌砖(灌数据)。根据行业最佳实践,可以分为三大阶段

1. 准备阶段
评估与规划

2. 结构迁移
建表、字段映射

3. 数据迁移
灌数据

4. 验证阶段
校验与测试

⚠️ 关键原则
父表先于子表

⚠️ 核心工具
Kettle转换

  • 1. 准备阶段:明确迁什么、不迁什么,并完成数据类型映射。
  • 2. 结构迁移(建表):这是最关键的步骤。必须先建好目标表,并且要处理好表之间的依赖关系。
  • 3. 数据迁移:利用Kettle等工具,将数据从源库导入目标表。
  • 4. 验证阶段:迁移完成后,必须进行严格的数据校验。

二、迁移顺序:先搬字典,再搬业务,最后搬大表

这是你问的核心。一个合理的迁移顺序能避免外键报错,并方便问题排查。根据我们的表清单,建议顺序如下:

阶段一:字典表
(基础数据)

阶段二:核心业务表
(患者、病历索引)

阶段三:大字段表
(文本、BLOB)

阶段四:关联表
(中间关系表)

DICT_EMR_DEPT
DICT_DEPT_KNOWLEDGE
STRNEWEMR_MENU

PAT_MASTER_INDEX
STRNEWEMR_MR_FILE_INDEX

STRNEWEMR_MR_FILE_TEXT

分阶段依据:

  • 阶段一:字典/配置表(Foundation):这些是系统的“基石”,数据量小,被其他表广泛引用。必须先迁移,否则后续业务表导入时,关联的外键会报错。
  • 阶段二:核心业务表(Core Business):如患者主索引、病历主索引。它们是主体数据,行数较多(如40万行),可以放在中间迁移。
  • 阶段三:大字段/日志表(Large Objects):如STRNEWEMR_MR_FILE_TEXT,这类表包含BLOB/CLOB,数据量大,迁移耗时且容易出错。建议放在最后,单独处理
  • 阶段四:关联表(Relationships):如用户-角色关联表,这些表通常依赖前面的主数据,放在最后迁移。

三、各阶段操作详解(含SQL示例)

阶段一:迁移字典表(以DICT_EMR_DEPT为例)

这是你刚刚成功跑通的流程,我们把它标准化。

步骤1:在MySQL中创建表结构

USEemr_raw;CREATETABLEIFNOTEXISTSemr_dict_dept(dept_idVARCHAR(50)NOTNULLCOMMENT'科室编码',dept_nameVARCHAR(200)NOTNULLCOMMENT'科室名称',PRIMARYKEY(dept_id))ENGINE=InnoDBDEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_unicode_ci;

步骤2:在Kettle中配置转换

  • 表输入 (Oracle)SELECT DEPT_ID, DEPT_NAME FROM POWERPLUSEMR.DICT_EMR_DEPT
  • 表输出 (MySQL):目标表emr_dict_dept,并做好字段映射。

步骤3:运行并验证

  • 运行Kettle转换。
  • 在MySQL中执行SELECT COUNT(*) FROM emr_dict_dept;,确认行数与Oracle一致(172行)。
阶段二:迁移核心业务表(以STRNEWEMR_MR_FILE_INDEX为例)

步骤1:在MySQL中创建表结构(关键:处理字段类型和长度)

USEemr_raw;-- 假设表结构类似,重点处理 VARCHAR2 的长度CREATETABLEIFNOTEXISTSemr_mr_index(mr_idBIGINTAUTO_INCREMENTPRIMARYKEY,mr_codeVARCHAR(50)NOTNULL,patient_idVARCHAR(50),-- 其他字段...create_date_timeDATETIME-- Oracle的DATE要转为DATETIME)ENGINE=InnoDBDEFAULTCHARSET=utf8mb4;

步骤2:在Kettle中配置转换

  • 表输入 (Oracle)SELECT * FROM POWERPLUSEMR.STRNEWEMR_MR_FILE_INDEX
  • 表输出 (MySQL):目标表emr_mr_index,做好字段映射。

注意:此表有40万行数据,建议先在Kettle的“表输入”中使用WHERE ROWNUM <= 10000进行小批量测试,确认无误后再移除此限制。

阶段三:迁移大字段表(STRNEWEMR_MR_FILE_TEXT

这是最复杂的部分,需要单独处理。

步骤1:在MySQL中创建表结构

USEemr_raw;CREATETABLEIFNOTEXISTSemr_mr_text(text_idBIGINTAUTO_INCREMENTPRIMARYKEY,mr_codeVARCHAR(50)NOTNULL,file_textLONGBLOB,-- Oracle的BLOB对应MySQL的LONGBLOB-- 其他字段...)ENGINE=InnoDBDEFAULTCHARSET=utf8mb4;

步骤2:在Kettle中配置特殊转换

  • 表输入 (Oracle)SELECT MR_CODE, FILE_TEXT FROM POWERPLUSEMR.STRNEWEMR_MR_FILE_TEXT
  • 关键:Kettle需要特殊配置以支持BLOB字段的读写。

四、迁移后的验证(数据校验)

数据迁移完成后,必须进行校验,否则上线后可能出现数据不一致的严重问题。

校验层级校验内容方法/工具重要性
数量校验对比源库和目标库每个表的总行数是否一致。分别对Oracle和MySQL执行SELECT COUNT(*),对比结果。必须
字段校验对关键表,抽样对比几行所有字段的值是否完全一致。在Oracle和MySQL中查询同一主键的记录,人工或脚本对比。强烈建议
业务校验运行几个核心业务的查询SQL,对比结果是否一致。执行典型的报表或查询语句,比对返回结果。建议

五、总结:你现在的状态和接下来的路

你的状态下一步行动
已打通DICT_EMR_DEPT迁移链路重复此模式,迁移阶段一剩余的字典表(如STRNEWEMR_MENU等)。
进行中:理解迁移顺序与原理根据阶段二的方法,开始准备STRNEWEMR_MR_FILE_INDEX的迁移。
📝待规划:处理大表和大字段我们到时一起专门攻克STRNEWEMR_MR_FILE_TEXT这个难点。

你问的“迁移顺序”和“语句”正是整个项目最核心的技术点,我们现在已经把它梳理清楚了。接下来就按照这个路线图,一张表一张表地推进。你先继续迁移STRNEWEMR_MENU,有任何问题随时发我。

http://www.jsqmd.com/news/1326056/

相关文章:

  • UE5蓝图Branch节点源码解析与避坑指南
  • 2026热门AI修图工具实测:三款对话式修图体验对比 - GrowUME
  • 企业级AI代码助手安全部署指南:从DoorDash事件看风险管控
  • 如何在2025年免费畅玩经典Flash游戏?终极解决方案指南
  • SQL语句的解析过程
  • Windows系统bcryptprimitives.dll缺失的解决方案
  • Unity渲染优化:从DrawCall到Batches与SetPass Calls的实战指南
  • 机器学习从入门到实践:核心知识与项目开发指南
  • 鸣潮工具箱:画质优化与抽卡分析的一站式解决方案
  • 2026年使用寿命长的压装电缸品牌推荐 高精度压装电缸选择指南 - 全域品牌推荐
  • 2026 福州卖金新规科普!牢记黄金回收四不五要红线,本地人出手黄金大多选易奢福 - 奢侈品回收实体店探店
  • 改变AI格局的Transformer:大模型的“发动机“长什么样?
  • C语言循环控制与结构化程序设计详解
  • 智能体工程评测:从概念验证到稳定交付的系统化实践
  • AI人力资源评估系统的漏洞与反制策略
  • SSM框架构建游戏交易平台开发实践
  • 2026景观石雕立体字厂家选购指南及实力盘点 - 曲阳嘉华园林
  • 终极小红书内容保存指南:3种简单方法让你的收藏永不消失
  • 抖音批量下载终极指南:3分钟学会高效下载无水印视频和封面
  • 基于压缩感知的图像压缩加密一体化算法与Matlab实现
  • 跨平台游戏模组下载终极指南:WorkshopDL免费解锁Steam创意工坊
  • I2C通信故障排查:从信号原理到实战调试的完整指南
  • 2026年孕妇可用温和洗发露选购指南 - 谁都没有我好看
  • 3dsconv:一键解决3DS游戏格式转换难题,让备份游戏轻松安装
  • 本地人私藏:石家庄黄金回收地图出炉,裕华、长安高分店全盘点 - 一日一测评
  • 10分钟快速搭建个人云游戏服务器:Sunshine完整自托管游戏串流终极指南
  • 同态加密在大型语言模型隐私保护中的应用与优化
  • MAA助手完整指南:5分钟掌握《明日方舟》自动化游戏技巧
  • Unity游戏开发:三阶贝塞尔曲线实现角色丝滑移动路径
  • STM32 LWIP移植核心逻辑与稳定性实战指南