본문 바로가기
Data WareHouse & Data Mart

SCD(Slowly Changing Dimension) 개념 및 종류

by 커져라불어라 2020. 7. 16.
반응형

안녕하세요 투자하는 개발자 투개자입니다.


오늘은 SCD(Slowly Changing Dimension) 테이블에 대해 이야기하려 합니다.

저번글에서 말씀드렸다 싶이 OLAP 환경에서는 이력, 즉 과거, 현재의 개념이 가장 중요합니다.

디멘젼 테이블의 궁극적인 목적은 팩트테이블을 설명하는 정보테이블이라고 할 수 있기 떄문입니다.


※팩트테이블 : 값을 나타내는 테이블

※디멘젼테이블 : 값을 설명하는 테이블


그렇다면 팩트를 설명하는 디멘젼테이블의 데이터가 바뀌어야만 하는 상황이라면 어떻게 해야할까요?

단순히 UPDATE나 DELETE, INSERT를 하면 분석하고자 하는 펙트와 디멘젼이 엉켜버릴 수 있고, 정확한 분석을 할 수 없게 됩니다.


예를들어 설명하겠습니다.

A사람은 2020년 1월 1일부터 B회사 영업A팀 부서 신입사원으로 사회생활을 시작했습니다. 영업A팀에서 1000만원의 성과를 올리며 회사를 다니고 있던 중 회사 내부 사정으로 인해 2022년 1월 1일 부로 영업C팀으로 부서이동이 이루어졌습니다. 영업C팀에 가서는 900만원의 성과를 올리며 현재까지 영업C팀의 에이스로 근무하고 있습니다. 이때 영업C팀의 성과는 얼마일까요?


생각해보면 영업C팀 성과 + A사람 성과(900만원)이지만, 영업C팀 성과 + A사람성과(1000만원 + 900만원)의 결과를 받게 될 것입니다. 

이유는 OLTP환경에서 과거는 중요하지 않고, 현재가 가장 중요하기 때문입니다. 과거 영업A팀에 근무한 A사람은 현재 영업C팀에 근무하고 있어 OLTP가 바라보는 관점은 영업C팀의 속해있는 A사람의 성과이기 때문입니다. 이렇게 되면 정확한 분석을 할 수 없어집니다.

하여 OLAP환경을 구성할 때 이런 상황을 해결하기 위해 탄생한 개념이 SCD(Slowly Changing Dimension)입니다.


SCD테이블은 데이터의 변화가 필요할 때, 총 6가지 타입으로 구성할 수 있습니다.

TYPE 1 

직접 업데이트입니다. 과거의 값은 없애고 현재의 값만 적용되는 타입니다.

위의 예시로는 A사람의 영업A팀에 다녔던 기록은 없어지고 영업C팀으로 UPDATE하는 타입니다.

1타입은 현재위주로 생각하는 테이블입니다. 즉, 과거의 기록이 필요없는 시스템 혹은 테이블이라면 1타입을 적용할 수 있습니다.


ID

사원

부서 

START_DATE 

 1

영업A 

2020-01-01 




 ID

사원 

부서 

START_DATE 

 1

영업C 

2022-01-01 



TYPE 2

타입 2는 행단위 관리입니다. 행단위에 날짜와 FLAG를 통해 디멘젼 테이블을 관리하는 방법입니다.

행을 추가 후 기존 행은 날짜를 통해 종료를 알려주고 FLAG로 STATUS를 설명한 후 새로 들어온 행이 현재를 설명합니다.

팩트와 조인할 때는 ID을 건 후 팩트의 날짜를 기준으로 START_DATE, END_DATE 범위에 맞게 BETWEEN으로 값을 뽑아오시면 됩니다.


 ID

 사

부서 

START_DATE

END_DATE 

 FLAG

 1

A

영업A 

2020-01-01 

2021-12-31 

0

 1

영업C 

2022-01-01 

9999-12-31 

1

TYPE 3

타입 3은 이전에 적용한 열을 추가해주는 방법입니다.

과거 기록에 대한 정보를 열을 추가해서 설명해주는 타입이죠


 ID

사원 

부서 

전부서

 1

 A

영업C 

영업A 

TYPE 4 (TYPE1 + TYPE3)

타입4는 기존테이블에는 타입1과 같이 아무 영향이 없지만 HISTORY성 테이블을 만들어 HISTORY 테이블에 기록하는 방법입니다. 이때 대리키를 주어 과거와 현재를 구분하는 키를 하나 더 생성합니다.


<기존 테이블>


ID

사원

부서 

START_DATE 

 1

영업A 

2020-01-01 




 ID

사원 

부서 

START_DATE 

 1

영업C 

2022-01-01 



<HISTORY 테이블>


 대리키

ID 

사원 

부서 

START_DATE 

 1

 1

 A

영업A 

2020-01-01

 2

 1

 A

영업C

2022-01-01 

TYPE 6 (TYPE1 + TYPE2 + TYPE3)

마지막으로 타입6는 짬뽕, 즉 하이브리드 타입니다.


 대리키

ID 

사원 

부서 

전부서 

START_DATE 

END_DATE 

 FLAG

 1

영업C팀 

영업A팀 

2020-01-01 

2021-12-31 

0

영업C팀 

영업C팀 

2022-01-01 

9999-12-31 

1




감사합니다.

반응형