4. 源数据剖析与映射规划
在OMOP CDM标准化工程中,源数据剖析与映射规划是决定整个ETL项目成败的关键前置环节。如果把CDM比作一座标准化仓库,那么源数据剖析就是清点现有货物、识别货物类型、规划货架位置的过程。没有这一步,后续的ETL开发将陷入反复返工的泥潭。
一、源数据剖析:从"有什么"到"是什么"
源数据剖析的目标是全面掌握源系统的数据结构、数据质量与业务语义。实际操作中,剖析工作应覆盖三个层次:
结构层剖析关注表、字段、主外键关系、数据类型与约束。例如,某医院HIS系统中患者基本信息表PAT_INFO包含PAT_ID、NAME、SEX、BIRTH_DATE等字段,其中PAT_ID为主键,SEX为CHAR(1)类型,取值"1/2/9"分别代表男/女/未知。这一层剖析产出的是数据字典与ER图。
内容层剖析关注字段的实际取值分布、空值率、唯一性、异常值。例如,对BIRTH_DATE字段统计发现空值率为3.2%,存在出生日期晚于当前日期的异常记录17条,日期格式混杂了"YYYY-MM-DD"和"YYYYMMDD"两种。这些发现直接决定后续清洗规则的设计。
语义层剖析关注字段的业务含义与临床语境。例如,SEX字段在挂号系统中可能表示"患者性别",但在某些科室系统中可能表示"本次就诊性别",两者语义不同,映射到CDM的gender_concept_id时处理方式也不同。
二、临床事件识别:从字段到事件域
OMOP CDM的核心设计理念是以"临床事件"为中心组织数据。源系统中的一条记录往往对应一个或多个临床事件,需要将其归入正确的CDM域(Domain)。
识别临床事件时,应逐一回答以下问题:该记录描述的是"谁"(person)、"何时"(时间戳)、"发生了什么"(事件类型)、"结果如何"(值/单位)。例如,一条检验记录(患者张三,2024-03-15 08:30,血常规-白细胞计数,结果6.8×10⁹/L)应映射为MEASUREMENT域的一条记录;一条用药医嘱(患者张三,2024-03-15,阿莫西林胶囊0.5g tid po)应映射为DRUG_EXPOSURE域。
常见的事件域归属判断规则如下:诊断类记录→CONDITION_OCCURRENCE;手术操作→PROCEDURE_OCCURRENCE;检验检查结果→MEASUREMENT;用药医嘱→DRUG_EXPOSURE;生命体征→MEASUREMENT或OBSERVATION;过敏史→OBSERVATION。需要注意的是,同一源表可能拆分到多个域,例如急诊记录表可能同时包含诊断、操作和用药信息。
三、映射策略与优先级制定
映射策略的制定需要回答两个核心问题:字段映射到哪张CDM表,以及映射的优先级如何排序。
字段到CDM表的映射遵循"域归属"原则。以SEX字段为例,它应映射到PERSON表的gender_concept_id,而非直接存储原始值。映射时需建立本地码表与OMOP标准概念(Concept)的对应关系:本地值"1"→OMOP Concept 8507(MALE),"2"→8532(FEMALE),"9"→8551(UNKNOWN)。这一过程称为术语映射,是CDM标准化的核心。
优先级排序应遵循"先核心后边缘、先简单后复杂"的原则。建议将映射任务分为三个优先级:
- P0(必须优先完成):PERSON、VISIT_OCCURRENCE等基础表的直接映射字段,以及所有表的主键、外键、日期字段。这些字段是CDM的骨架,缺失将导致整个数据集不可用。
- P1(核心临床字段):CONDITION_OCCURRENCE、DRUG_EXPOSURE、MEASUREMENT、PROCEDURE_OCCURRENCE等临床事件表的核心字段,包括概念ID、日期、数值、单位。这些字段直接决定CDM的分析价值。
- P2(可后置处理):派生字段(如年龄、BMI)、辅助字段(如provider_id、care_site_id)、以及需要复杂逻辑计算的字段。这些字段可在核心映射完成后逐步补充。
四、映射规划交付物
完成上述工作后,应形成一份《字段映射规划表》,作为ETL开发的直接依据。该表至少包含以下字段:源系统名、源表名、源字段名、源数据类型、目标CDM表、目标字段名、映射类型(直接/转换/术语/派生)、转换规则描述、优先级、负责人、备注。例如:
| 源表 | 源字段 | 目标CDM表 | 目标字段 | 映射类型 | 转换规则 | 优先级 |
|---|---|---|---|---|---|---|
| PAT_INFO | PAT_ID | PERSON | person_source_value | 直接 | 原值保留 | P0 |
| PAT_INFO | SEX | PERSON | gender_concept_id | 术语 | 1→8507, 2→8532, 9→8551 | P0 |
| LAB_RESULT | TEST_CODE | MEASUREMENT | measurement_concept_id | 术语 | 本地检验码→LOINC | P1 |
| LAB_RESULT | VALUE | MEASUREMENT | value_as_number | 转换 | 字符串转数值,单位归一化 | P1 |
| DRUG_ORDER | DRUG_NAME | DRUG_EXPOSURE | drug_concept_id | 术语 | 商品名→通用名→RxNorm | P1 |
最后需要强调的是,源数据剖析与映射规划的质量直接决定CDM数据的可信度。一个常见的误区是"先跑通ETL再优化映射",这往往导致后期大量返工。正确的做法是在剖析阶段就投入足够精力,把数据质量问题、语义歧义、编码差异尽可能暴露出来,并在映射规划中给出明确的处理策略。只有这样,后续的ETL开发才能高效、可控地推进。