2. 源数据剖析与映射可行性评估
在把任何一条临床记录写入 OMOP CDM 之前,必须先回答一个更基础的问题:源系统里到底有什么、长什么样、能不能映射。源数据剖析(Source Data Profiling)与映射可行性评估,就是为后续 ETL 建立“事实底账”的环节。它不产出 CDM 表,却决定了后续映射是顺畅推进还是反复返工。本节围绕电子病历(EMR)、医保结算、登记队列三类典型源系统,讲清结构探查、数据质量画像、字段语义识别和映射风险清单四件事怎么做。
一、先分清三类源系统的结构差异
不同源系统的“形状”差别很大,探查策略也不同。EMR 通常是高度规范化的关系库,围绕患者、就诊、医嘱、检验、病历文书等实体展开,主键外键清晰,但字段命名常带厂商或院内缩写,如 PAT_ID、VISIT_NO、ORDER_ITEM。医保结算数据更接近“一次结算一行”的宽表,字段以费用、诊断编码、项目编码为主,患者标识往往是加密后的参保号,缺少连续就诊轨迹。登记队列(Registry)则常是研究者手工维护的专题表,字段少、随访节点明确,但缺失和口径不一致问题突出。
结构探查的第一步是拿到每张表的元数据:表名、字段名、数据类型、长度、是否可空、主键、索引、行数。对 EMR 还要额外确认就诊与患者、医嘱与就诊之间的关联路径,因为这直接决定 visit_occurrence 和 drug_exposure 能否正确挂接。对医保数据要确认结算粒度是“一次住院一行”还是“一个项目一行”,粒度判断错误会导致 cost 重复累加。
二、数据质量画像:用可量化指标代替“感觉脏”
质量画像不是笼统地说“数据质量差”,而是对每个关键字段给出可复核的指标。常用维度包括:空值率、唯一值数量、取值分布、格式一致性、参照完整性、时间合理性。例如对 BIRTH_DATE 统计空值率与未来日期占比;对 GENDER 统计取值集合,看是否存在 M/F/1/2/男/女/未知 混用;对诊断编码统计是否符合 ICD-10 或 ICD-9 的长度与首字母规则。
一个可执行的画像片段如下,用于快速摸清字段取值:
-- 示例:对性别字段做取值分布画像
SELECT gender_code, COUNT(*) AS cnt,
ROUND(COUNT(*) * 100.0 / SUM(COUNT(*)) OVER (), 2) AS pct
FROM src_patient
GROUP BY gender_code
ORDER BY cnt DESC;
-- 示例:就诊时间合理性检查
SELECT COUNT(*) AS total,
SUM(CASE WHEN visit_start > visit_end THEN 1 ELSE 0 END) AS reversed,
SUM(CASE WHEN visit_start > CURRENT_DATE THEN 1 ELSE 0 END) AS future_rows
FROM src_visit;
这些结果要落到一张“字段画像表”里,字段包括:源表、源字段、数据类型、空值率、唯一值数、Top 取值、疑似标准、备注。它是后续语义识别和风险清单的输入,而不是一次性报告。
三、字段语义识别:从“像什么”到“是什么”
语义识别的目标,是判断源字段对应 OMOP 的哪个概念域(Domain)和哪张标准表。识别不能只看字段名,要结合取值、上下文和业务含义。例如 DIAG_CODE 若取值形如 E11.9,大概率是 ICD-10 诊断,应映射到 condition_occurrence;若形如 250.00,则可能是 ICD-9,需要先做版本判定。再如 ITEM_NAME 若取值是“阿莫西林胶囊”,属于药品域,应进入 drug_exposure;若取值是“血常规”,则更接近测量或操作,需要进一步区分。
识别时建议对每个候选字段记录三件事:源取值样例、推断的标准概念、置信度(高/中/低)。置信度低的字段不要急于映射,先列入待确认清单,向数据提供方或临床人员核实。这一步的产出是“字段—概念”对照表,它是映射设计的直接依据。
四、映射风险清单:把不确定性显式化
可行性评估的最终交付物是映射风险清单。它把前面发现的问题转化为可跟踪、可决策的条目。每条风险应包含:风险描述、涉及源字段、影响的目标表、风险等级、建议处理方式、责任人。常见风险类型包括:标识缺失导致无法关联患者、编码版本不明、时间粒度不足(只有年月没有日)、单位不统一、自由文本无法结构化、隐私字段被脱敏后不可逆。
例如“医保数据中患者标识为加密参保号,且无跨次就诊关联键”,会直接影响 person 与 visit_occurrence 的构建,属于高风险,处理方式可能是引入院内主索引做桥接,或明确该数据仅用于费用分析而不进入患者级 CDM。风险清单不是一次性文档,而应在映射和 ETL 过程中持续更新状态。
五、把四步串成可复用的评估动作
实际项目中,这四步往往交叉进行。一个稳妥的做法是:先对全部源表做一轮结构探查,形成表清单和关联图;再对进入映射范围的关键字段做质量画像;随后逐字段做语义识别并标注置信度;最后把低置信度、缺失、冲突项汇总为风险清单,并给出“可映射 / 需转换 / 暂缓 / 不可映射”的结论。这个结论直接决定后续 ETL 的范围和优先级。
visit_occurrence 会造成费用重复;登记队列若只有随访日期而无就诊标识,强行生成 visit_occurrence 会引入虚假就诊。粒度与标识是可行性评估中最容易埋雷的两点。完成本节工作后,应当能够回答:源系统有哪些表、关键字段长什么样、每个字段可能对应哪个 OMOP 概念、哪些地方存在无法自动消解的风险。带着这份底账进入映射设计,才能把返工控制在评估阶段,而不是等到 ETL 跑完才发现患者对不上、费用翻倍、编码版本错位。