SCD-2 기준일 조인
팩트 테이블을 SCD-2 마스터 빌더 이력 테이블에 조인하여, 각 팩트 행에 대해 현재 버전이 아니라 해당 팩트의 날짜에 유효했던 마스터 데이터 버전을 반환합니다.
이 단계를 사용하면 각 거래를 발생 당시 적용되던 지역, 코스트 센터, 소유자 또는 가격에 귀속할 수 있습니다. LEFT JOIN이므로 모든 팩트 행이 보존됩니다. 일치하는 버전이 없는 키(알 수 없는 키이거나 해당 키의 첫 버전보다 이전 날짜)는 삭제되지 않고 전달 열이 null인 상태로 반환됩니다.
테이블
섹션 제목: “테이블”팩트 테이블
섹션 제목: “팩트 테이블”보강하려는 행입니다(거래, 주문, 이벤트 등). 각 행에는 비즈니스 키와 날짜가 있습니다.
SCD-2 테이블
섹션 제목: “SCD-2 테이블”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인 상태로 유지됩니다.
관련 항목
섹션 제목: “관련 항목”- SCD-2 마스터 빌더 — 이 단계가 읽는 이력 테이블을 만듭니다.
- Dimension Load — 테이블에서 계층을 로드합니다.