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

迁移实战派01:ETL迁移基础知识-思路和规划
迁移实战派01 ETL迁移基础知识-思路和规划一、迁移总体思路遵循“先结构后数据再校验”的铁律数据迁移就像盖楼得先打地基建表结构再往上砌砖灌数据。根据行业最佳实践可以分为三大阶段1. 准备阶段评估与规划2. 结构迁移建表、字段映射3. 数据迁移灌数据4. 验证阶段校验与测试⚠️ 关键原则父表先于子表⚠️ 核心工具Kettle转换1. 准备阶段明确迁什么、不迁什么并完成数据类型映射。2. 结构迁移建表这是最关键的步骤。必须先建好目标表并且要处理好表之间的依赖关系。3. 数据迁移利用Kettle等工具将数据从源库导入目标表。4. 验证阶段迁移完成后必须进行严格的数据校验。二、迁移顺序先搬字典再搬业务最后搬大表这是你问的核心。一个合理的迁移顺序能避免外键报错并方便问题排查。根据我们的表清单建议顺序如下阶段一字典表基础数据阶段二核心业务表患者、病历索引阶段三大字段表文本、BLOB阶段四关联表中间关系表DICT_EMR_DEPTDICT_DEPT_KNOWLEDGESTRNEWEMR_MENUPAT_MASTER_INDEXSTRNEWEMR_MR_FILE_INDEXSTRNEWEMR_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))ENGINEInnoDBDEFAULTCHARSETutf8mb4COLLATEutf8mb4_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)ENGINEInnoDBDEFAULTCHARSETutf8mb4;步骤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-- 其他字段...)ENGINEInnoDBDEFAULTCHARSETutf8mb4;步骤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有任何问题随时发我。