ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Slowly Changing Dimension (SCD) 이해하기
    카테고리 없음 2025. 9. 2. 18:58

    데이터 웨어하우징과 ETL 파이프라인을 다루다 보면, 시간에 따라 변하는 데이터를 어떻게 관리해야 할지 고민하게 됩니다. 특히 고객, 상품, 조직 같은 마스터 데이터는 시간이 지남에 따라 속성이 바뀌는 경우가 많습니다. 이때 Slowly Changing Dimension (SCD, 점진적 변화 차원) 개념을 적용할 수 있습니다.


    SCD란 무엇인가?

    SCD는 데이터 웨어하우스에서 차원 테이블의 속성이 시간이 지남에 따라 어떻게 변하는지를 관리하는 방법론입니다. 예를 들어 고객의 주소, 직원의 소속 부서, 상품의 카테고리 등이 변경될 수 있습니다.

    변경된 데이터를 어떻게 기록할지에 따라 SCD Type이 구분됩니다.


    SCD 유형

    1. SCD Type 1 (덮어쓰기)

    • 변경된 값을 기존 데이터에 그대로 덮어씁니다.
    • 과거 이력은 보존하지 않습니다.

    예시:

    -- 고객 테이블 (SCD Type 1)
    UPDATE customer
       SET address = '서울시 강남구'
     WHERE customer_id = 1001;

    customer_idnameaddress

    1001 홍길동 서울시 강남구

    과거 주소(서울시 마포구)는 사라지고 최신 값만 유지됩니다.


    2. SCD Type 2 (이력 관리)

    • 변경된 값을 새로운 레코드로 추가하고, 과거 값을 보존합니다.
    • 일반적으로 start_date, end_date, is_current 같은 필드를 둡니다.

    예시:

    -- 고객 테이블 (SCD Type 2)
    INSERT INTO customer_dim (customer_id, name, address, start_date, end_date, is_current)
    VALUES (1001, '홍길동', '서울시 강남구', '2025-09-01', NULL, true);
    
    UPDATE customer_dim
       SET end_date = '2025-08-31', is_current = false
     WHERE customer_id = 1001 AND is_current = true;
    surrogate_key customer_id name address start_date end_date is_current
    1 1001 홍길동 서울시 마포구 2020-01-01 2025-08-31 false
    2 1001 홍길동 서울시 강남구 2025-09-01 NULL true

    과거 값과 현재 값이 모두 보존됩니다.


    3. SCD Type 3 (일부 이력 보존)

    • 과거 값을 별도 컬럼에 저장합니다.
    • 제한된 이력만 보존할 때 사용합니다.

    예시:

    -- 고객 테이블 (SCD Type 3)
    ALTER TABLE customer ADD COLUMN prev_address VARCHAR(100);
    
    UPDATE customer
       SET prev_address = address,
           address = '서울시 강남구'
     WHERE customer_id = 1001;
    customer_id name address prev_address
    1001 홍길동 서울시 강남구 서울시 마포구

    최근 한 번의 변경 이력만 유지됩니다.


    어떤 SCD 유형을 선택할까?

    • Type 1 → 단순히 최신 값만 유지하면 될 때 (예: 이메일 주소)
    • Type 2 → 모든 변경 이력을 추적해야 할 때 (예: 고객 주소, 소속 조직)
    • Type 3 → 최근 변경 이력만 필요할 때 (예: 최근 2개 버전만 보관)

    마무리

    SCD는 데이터 웨어하우스의 품질과 분석 신뢰도를 높이는 핵심 기법입니다. 조직의 데이터 요구사항과 분석 목적에 맞춰 적절한 SCD 유형을 선택하는 것이 중요합니다.

    ETL 설계 시, 과거 데이터를 보존할 필요가 있는지 항상 먼저 고민해보는 습관이 필요합니다.

Copyright 2022. 0woong-developer all rights reserved.