Health Information/Common Data Model

OMOP-CDM 버전 비교: 5.3.1ver vs. 6.0ver

 

 

 

안녕하세요. 씨앤텍 시스템즈 입니다.

 

 

 

이번 글은 OHDSI의 OMOM-CDM 5.3.1버전과 6.0버전 차이에 대해서 정리해 보았습니다.

 

5.3.1버전의 공식문서가 18년도 6월 작성되었고 6버전은 10월에 작성되었는데

 

약 3~4개월되는 짧은 시간에 많은 변화가 있었습니다.

 

 


 

먼저 비교분석한 방법은 ohdsi 깃허브에 올라와있는 cdm 공식문서를 활용하였습니다.

 

6.0버전: https://github.com/OHDSI/CommonDataModel

 

 

 

 

1. v5.3.1에는 있지만 v6.0에서는 삭제된 테이블

 

ATTRIBUTE_DEFINITION,

COHORT_ATTRIBUTE,

DEATH 테이블은

v6.0에서 더이상 사용되지 않습니다.

 

다만 DEATH 테이블의 death_date 데이터는

PERSON 테이블에 새롭게 생긴 death_datetime 컬럼에 넣어주어야 합니다.

 

 

 

 

 

 

2. v5.3에는 없고 v6.0에 새롭게 생긴 테이블

 

METADATA,

SURVEY_CONDUCT,

LOCATION_HISTORY 테이블이

v6.0에서 새롭게 생겼습니다.

 

 

 

 

참고로 v5.3.1과 v6.0 데이터 아키텍처 그림을 비교로 봐주시기 바랍니다.

 

5.0버전 data 아키텍처

 

 

6.0버전 data 아키텍처

 

 

특히 달라진 점은 Results schema 영역이 생겼다는 점인데요, 

 

해당 영역이 생김으로써 CDM 데이터는 read-only 데이터와 writable 데이터를 더욱 엄격하게 구분 가능해졌다고 합니다. 

 

즉 CDM 데이터들이 result schema에 모여 연구 등에 활용되기 때문에 

 

만약 result schema 내용을 변경한다면 다른 데이터도 모두 수정해야 하므로

 

데이터 통합성(integrity)에 문제가 발생하게 될 것입니다.

 

이러한 이유로 result schema는 철저히 read-only로 해두었을 것이라는 생각이 듭니다.

 

 

 

 

 

3. v5.3.1에서 Required 필드가 NOT NULL이었지만 v6.0에서 NULL 허용으로 변경된 컬럼들

 

5.3 버전에서 특히 _date로 끝나는 컬럼은 null을 허용하지 않고,

_datetime으로 끝나는 컬럼은 null을 허용하였지만

 

6.0 버전으로 오면서 반대로 되었습니다.

 

예를들어 VISIT_OCCURRENCE 테이블의 경우 visit_start_date, visit_end_date 컬럼

VISIT_DETAIL 테이블의 visit_detail_start_date, visit_detail_end_date 컬럼

PROCEDURE_OCCURRENCE 테이블의 procedure_date 컬럼 등이 그렇습니다.

 

반대로  

VISIT_OCCURRENCE 테이블의 visit_start_datetime, visit_end_datetime

VISIT_DETAIL 테이블의 visit_detail_start_datetime, visit_detail_end_datetime

PROCEDURE_OCCURRENCE 테이블의 procedure_datetime 등은

NULL이었다가 NOT NULL로 바뀌었습니다.

 

예측컨대, _date로 끝나는 컬럼은 날짜만, _datetime으로 끝나는 컬럼은 날짜와 시간(시/분/초)까지 표기하기 때문에 

_date의 데이터가 _datetime 데이터에 결국 속하게 되므로 datetime을 기본으로 둔 것이 아닐까 하는 생각입니다.

 

사실 OMOP-CDM 역시 관계형 데이터베이스(Relational DataBase)이기 때문에

정규화를 지켜야 하지만 엄격하게 지키고 있는 것 같지는 않습니다.

 

RDB에서 3차 정규화는 2차 정규화를 만족하고

non-key 컬럼간에도 종속관계가 존재하지 않아야 하지만 person의 테이블을 보면 그렇지 않다는 것을 알 수 있습니다.

 

 

day of birth, month of birth, year of birth는 결국 birth_datetime을 이루는 내용!!!

 

 

4. v6.0버전으로 넘어오면서 컬럼이 추가된 테이블

 

테이블명(대문자)

추가된 컬럼     required     datatype 

순으로 적겠습니다.

 

 

NOTE

note_event_id   No   integer
note_event_field_concept_id   No   integer

 

OBSERVATION

observation_event_id   No   integer
obs_event_field_concept_id   Yes   integer
value_as_datetime   No   integer

 

LOCATION

country   No   varchar(100)
latitude   No   float 
longitude   No   float

-> county(군)만 있었는데 country(국가)가 추가되었습니다~!!

r에 따라서 단어 뜻이 달라지니 헷갈리지 마세요~~

 

PAYER_PLAN_PERIOD

contract_person_id   No   integer
contract_concept_id   Yes   integer
contract_source_value   No   integer
contract_source_concept_id   Yes   integer

 

 

 

 

 

5. v6.0으로 넘어오면서 컬럼명이 변경된 테이블들

 

테이블명(대문자)

바뀌기 전 컬럼명 -> 바뀐 후 컬럼명

입니다.

 

 

DRUG_ERA
drug_era_start_date -> drug_era_start_datetime
drug_era_end_date -> drug_era_end_datetime

DOSE_ERA
dose_era_start_date -> dose_era_start_datetime
dose_era_end_date -> dose_era_end_datetime

CONDITION_ERA
condition_era_start_date -> condition_era_start_datetime
condition_era_end_date -> condition_era_end_datetime

 

_ERA로 끝나는 모든 테이블의 _date 컬럼이 _datetime으로 변경되었습니다 ^^;

 

 

 

 

 

 

그 중 가장 드라마틱한 변화가 있었던 테이블은 COST 테이블입니다.

 

먼저 COST 테이블에 추가된 컬럼 내용입니다.

 

컬럼명   required   datatype

person_id    Yes    integer
cost_event_field_concept_id   Yes   integer
cost_concept_id   Yes   integer
cost_source_concept_id   Yes   integer
cost   Yes   float
incurred_date   Yes   date
billed_date   No   date
paid_date   No   date
cost_source_value   No   varchar(50)

 

 

삭제된 컬럼도 있습니다.

 

cost_domain_id   Yes   varchar(20)
total_charge   No   float
total_cost   No   float
total_paid   No   float
paid_by_payer   No   float
paid_by_patient   No   float
paid_patient_copay   No   float
paid_patient_coinsurance   No   float
paid_patient_deductible   No   float
paid_by_primary   No   float
paid_ingredient_cost   No   float
paid_dispensing_fee   No   float
amount_allowed   No   float

 

Null 허용이었다가 Not null로 변경된 컬럼

revenue_code_concept_id

drg_concept_id  

 

 

데이터 길이가 변경된 컬럼

drg_source_value    varchar(3) -> varchar(50)

 

 

 

 

 


 

 

 

 


 

오늘은  CDM 5.3.1버전과 6.0 버전의 차이점에 대해서 알아보았고,

 

다음 포스팅에서는 이것을 매핑시키는 방법에 대해서 직접 쿼리문 예시를 보여드리면서 설명을 드리도록 하겠습니다.

 

 


 

 

 

감사합니다.

 

 

728x90