콘텐츠로 이동

팩트 테이블을 SCD-2 마스터 빌더 이력 테이블에 조인하여, 각 팩트 행에 대해 현재 버전이 아니라 해당 팩트의 날짜에 유효했던 마스터 데이터 버전을 반환합니다.

이 단계를 사용하면 각 거래를 발생 당시 적용되던 지역, 코스트 센터, 소유자 또는 가격에 귀속할 수 있습니다. LEFT JOIN이므로 모든 팩트 행이 보존됩니다. 일치하는 버전이 없는 키(알 수 없는 키이거나 해당 키의 첫 버전보다 이전 날짜)는 삭제되지 않고 전달 열이 null인 상태로 반환됩니다.

보강하려는 행입니다(거래, 주문, 이벤트 등). 각 행에는 비즈니스 키와 날짜가 있습니다.

SCD-2 마스터 빌더가 생성한 이력 테이블이며, 추적 대상 속성과 함께 valid_from, valid_to, is_current를 포함합니다.

보강된 팩트 행이 기록되는 위치입니다. 뷰가 아니라 테이블이어야 합니다. 원래의 모든 팩트 열은 그대로 전달되고, 전달된 마스터 데이터 열이 뒤에 추가됩니다.

기준일은 각 팩트 행을 해석하는 시점입니다. 다음 두 가지 중 정확히 한 가지 방법으로 지정합니다.

  • 팩트 기준일 열 — 팩트 테이블의 날짜 열입니다(예: txn_date). 각 행은 자신의 날짜를 기준으로 해석됩니다.
  • 리터럴 기준일 — YYYY-MM-DD 형식의 단일 날짜 또는 {report_date} 같은 워크플로 변수이며, 모든 팩트 행에 적용됩니다(팩트 테이블 전체를 하나의 보고 날짜 기준으로 해석). 변수는 단계가 실행될 때 채워집니다.

이름 변경 옵션은 전달된 열의 이름이 팩트 열과 같을 때 충돌을 방지합니다.

  • 전달 접두사 / 전달 접미사 — 전달된 각 열의 출력 이름에 추가됩니다(prefix + 열 + suffix). 이름을 바꾼 뒤에도 전달된 열이 팩트 열 또는 다른 전달 열과 충돌하면, 조용히 덮어쓰지 않고 실행이 실패합니다.

SCD-2 검사를 사용하여 SCD-2 테이블의 열을 나열한 다음, 각 열에 역할을 지정합니다.

역할 의미
비즈니스 키 팩트와 이력을 연결하는 키입니다(예: customer_id). 팩트의 키 열과 일치해야 합니다. 하나 이상 필요합니다.
전달 열 팩트 행에 가져올 속성입니다(예: region). 하나 이상 필요합니다.
(무시) 역할이 지정되지 않은 열은 전달되지 않습니다.

다음과 같은 경우 열 또는 날짜를 명시한 메시지와 함께 단계 저장이 거부됩니다.

  • 열이 비즈니스 키 또는 전달 열로 두 번 이상 지정된 경우 — ‘region’ is tagged as a Carry Column more than once.
  • 열이 비즈니스 키이면서 전달 열인 경우 — customer_id can’t be both a Business Key and a Carry Column: the key columns already come from the fact table.
  • 리터럴 기준일이 YYYY-MM-DD 형식의 유효한 날짜가 아닌 경우 — The Literal As-Of Date ‘2026-02-30’ must be a date in YYYY-MM-DD form. 워크플로 변수를 지정한 날짜는 실행 시 변수가 채워질 때 검사됩니다.

팩트 행은 반개구간 비교를 사용하여, 기준일이 포함되는 구간의 이력 버전 하나와 일치합니다.

valid_from <= as_of AND as_of < valid_to

하한은 포함되고 상한은 포함되지 않습니다. 경계일에는 다음과 같이 동작합니다.

  • as_of == valid_from → 해당 버전과 일치합니다(시작일에 효력이 발생).
  • as_of == valid_to → 해당 버전과 일치하지 않으며, valid_from이 이 valid_to와 같은 다음 버전으로 넘어갑니다.

SCD-2 마스터 빌더는 한 버전의 valid_to가 다음 버전의 valid_from이 되도록 연속된 버전을 기록하므로, 모든 날짜는 공백이나 중복 없이 정확히 하나의 버전에 대응됩니다. 2026-04-01자 변경은 새 값이 4월 1일 당일부터 적용된다는 뜻이며, 3월 31일의 거래에는 여전히 이전 값이 적용됩니다.

SCD-2 마스터 빌더에서 이어서, 각 거래를 해당 날짜에 유효했던 지역에 귀속합니다.

customer_scd2(이력 테이블):

customer_id region valid_from valid_to is_current
C1 West 2026-01-01 2026-04-01 false
C1 Central 2026-04-01 9999-12-31 true
C2 East 2026-01-01 9999-12-31 true

transactions(팩트 테이블):

txn_id customer_id txn_date amount
T1 C1 2026-03-15 100
T2 C1 2026-04-01 200
T3 C2 2026-05-10 150
T4 C9 2026-05-10 90

구성: 팩트 테이블 = transactions, SCD-2 테이블 = customer_scd2, 출력 테이블 = transactions_by_region, 팩트 기준일 열 = txn_date, 비즈니스 키 = customer_id, 전달 열 = region.

transactions_by_region:

txn_id customer_id txn_date amount region
T1 C1 2026-03-15 100 West
T2 C1 2026-04-01 200 Central
T3 C2 2026-05-10 150 East
T4 C9 2026-05-10 90 (null)

경계를 확인하십시오. 2026-04-01의 T2는 Central로 해석됩니다. 반개구간에서는 4월 1일이 West 버전의 마지막 날이 아니라 Central 버전의 첫날이기 때문입니다. T4의 키 C9는 알 수 없는 키이므로, 삭제되지 않고 region이 null인 상태로 유지됩니다.