Dimension 은 변한다 — 그러면 뭘 하지?
고객이 나라를 옮기고, 제품이 카테고리를 갈아타고, tier 배정이 오르내려. Dimension 의 속성은 시간이 가면 변하고, 그 순간 "이 주문이 났을 때 그 사람 tier 는 뭐였지?" 라는 질문이 생각보다 흥미로워져. Kimball 의 답이 slowly changing dimension (SCD) type 패밀리야. 그중 둘 — Type 1 과 Type 2 — 로 실전의 거의 전부가 덮여.
SCD Type 1 — 덮어쓰기
Dimension 이 항상 현재 상태만 비춰. 고객이 'KR' 에서 'US' 로 이사하면 country column 을 덮어써. 과거의 fact 들은 이제 처음부터 US 고객이었던 것처럼 보여. 단순하고, 저장 공간이 적게 들고, 이력은 없어.
쓸 때: 역사적 속성 값이 중요하지 않을 때 (오타 수정, 프로필 사진 교체, 입력 에러 정정). Dimension 에 대해 "as-of" 리포팅을 물을 일이 없을 때.
SCD Type 2 — 버전을 남기는 이력
추적하는 속성이 변할 때마다 dimension 테이블에 새 row 를 만들어 — effective-from / effective-to 타임스탬프와 current-flag 를 달아서. Fact 테이블은 fact 의 타임스탬프가 들어가는 validity window 를 가진 dimension row 와 join 하고, 그래서 역사 리포트가 고객의 그때 그 시점 속성을 보여 줘.
쓸 때: 역사가 중요할 때. 국가별 매출이라면 과거 주문은 고객이 지금 사는 곳이 아니라 그때 실제로 살던 나라에 잡혀야 하니까.