Fact 테이블에서 대리 키(Surrogate key)를 사용할 시의 이점
대리키란, 테이블을 이루는 컬럼들 가운데 유일하게 식별하기에 적합한 단일 후보키가 존재하지 않을 때 추가할 수 있는 임의의 식별번호로 이루어진 후보키(Candidate key)이다.
차원 테이블과는 다르게, 팩트 테이블에선 대리키에 대해 강한 필요성은 없다. 일반적 DW의 백룸(backroom; 사용자에게 보이는 부분이 아닌 시스템 내부를 일컫는다. Kimball은 식당에서의 홀과 주방의 비유를 통해 이를 설명하였다.)인 ETL 작업을 위해 대리키를 적용한다.
팩트 테이블에 대리키를 적용하면 쿼리 성능이 저하되는 대신, 다음과 같은 이점이 있다.
즉각적인 unique 식별
- ETL 처리 도중 여러 차원을 탐색하지 않아도 특정 행을 식별할 수 있다.
데이터 벌크 로드 작업 편의성
- DBA가 데이터를 대량으로 로드하는 벌크 작업을 중단 혹은 재개할 때, 로드 작업이 어디까지 진행되었는지 대리키를 통해 특정할 수 있다.
팩트 테이블 삽입/삭제 작업
- 팩트 테이블의 Update 작업을 Insert plus Delete 작업으로 대체할 수 있다. 대량의 갱신 작업의 경우에는 Update 연산 보다는 Insert plus Delete 연산이 더욱 효율적이다.
상속 관계의 팩트 테이블
- 두개의 팩트 테이블을 부모 자식의 상속관계로 사용할 수 있다. 주의할 점은, 팩트 테이블을 다른 팩트 테이블과 직접적으로 조인해선 안된다. 수십억개의 팩트 테이블을 상호 조인한다면 수많은 컴퓨팅 자원을 낭비할 수 있다.
정규화 충동 참기 - 눈송이 스키마
차원 모델에서 Dimension 테이블을 정규화 하여 여러 테이블로 쪼개놓은 것을 눈송이 스키마(Snowflake schema)라고 한다. 이러한 확장이 필요할 때도 있지만, 일반적인 몇가지 이유로 스노우플레이킹을 자제해야 한다.
- 차원 모델의 주요 목표는 사용자 편의성이다. 과도한 스노우플레이킹은 사용자의 프레젠테이션을 더욱 복잡하게 만든다. 차원 탐색과 이에 필요한 조인관계 또한 어려워진다.
- 테이블과 조인이 많으면 쿼리 성능이 느려진다. 옵티마이저가 편향될 가능성이 더욱 높아진다.
- 디스크 공간 절약 효과가 미미하다. 데이터 용량의 높은 비중을 갖는것은 팩트테이블이다.
- 스노우플레이킹은 비트맵 인덱스의 사용을 무효화 한다.
참고: https://blog.naver.com/puzzlesystems/221560364902
[현장에서 발생하는 데이터모델링 이슈] 7. DW Presentation 영역에서의 정규화 유혹
이전 DW 설계 접근 방식의 이해 기사에서 Presentation 영역의 의미를 설명했다. 기억을 새로이 하는 차...
blog.naver.com
팩트 테이블의 유형
다음 표와 그림과 같이, 비즈니스 요구사항에 따라 같은 데이터에 대해 두, 세 가지 모델이 동시에 적합할 수 있다.
트랜잭션 | 정기 스냅샷 | 누적 스냅샷 | |
주기 | 트랜잭션이 발생하는 시점 | 주기적이고 예측 가능한 시간 간격으로 스냅샷 반복 생성 | 예측 불가능한 파이프라인/워크플로 실행 완료 시간 |
그레인 | 트랜잭션 1당 1개의 행 | 스냅샷 1당 1개의 행과 추가적인 차원 행들 | 파이프라인 실행 1당 1개의 행 |
날짜 차원 | 트랜잭션 날짜 | 스냅샷 날짜 | 파이프라인의 목적(마일스톤)에 따른 여러 날짜 |
팩트 | 트랜잭션 실적 | 시간 간격에 따른 누적 실적 | 파이프라인 실행에 따른 실적 |
팩트 테이블 희소성(sparsity) | 트랜잭션 활동에 따라 높거나 낮음 | 예측 가능하게 높음 | 파이프라인 싱행에 따라 높거나 낮음 |
팩트 테이블 갱신 | 에러 수정이 아닌 이상 갱신 없음 | 에러 수정이 아닌 이상 갱신 없음 | 파이프라인 실행 중 언제든 갱신 가능 |
느린 차원 변경(SCD; Slowly Changing Dimension)
Type 0: 원본 유지
- 차원 테이블의 속성값을 변경하지 않고 원본을 유지
- 영구적 내구성이 있는 속성과 키(예로, 가입 시점 신용 등급)에 적합
Type 1: 차원 테이블 행 덮어쓰기
- 이전 속성을 현재의 최신 값으로 대체
- 과거 값을 알 필요가 없는 경우 적합
- 배포되어있는 OLAP 큐브를 갱신 때 마다 재집계 해야할 수 있음
Type 2: 차원 테이블에 새로운 행 추가
- 새로운 속성 집합을 새로운 행으로 추가
- 동일한 자연키가 이미 존재하기 때문에 유일키로 사용 불가
- 행 유효기간(e.g. 최신 데이터는 9999-12-31), 만료 일, 유효성 플래그 속성을 추가하여 Type 1의 전략과 함께 사용 가능
Type 3: 차원 테이블에 새로운 속성 추가
- 새 열을 추가하여 기존 속성 값을 채운 후, 기존 속성 열을 새 속성 값으로 교체
- 차원 테이블의 수많은 행에 영향을 끼치는 변경이 있는 경우, 현재와 과거의 속성 값들이 동시에 분석했을 때 유용한 지표일 경우 적합
- 배포되어있는 OLAP 큐브를 갱신 때 마다 재집계 해야할 수 있음
Type 4: 팩트 테이블에 미니 차원 추가
- 자주 분석되거나 변경되는 속성들을 별도의 다른 차원으로 분리
- 자주 사용하는 필터 범위나 이산적인 값들의 조합을 미리 집계한 미니 차원을 사용
- 다음 테이블은 고객 통계 키 고객 연령 구매 빈도 소득 수준을 미니 차원으로 생성한 예시이다.
1 0~19 낮음 < $30K 2 0~19 중간 < $30K 3 0~19 높음 < $30K 4 20~25 낮음 < $30K 5 20~25 중간 < $30K 6 20~25 높음 < $30K 7 26~30 낮음 < $30K … … … … 51 0~19 높음 $30K~$40K 52 20~25 낮음 $30K~$40K 53 20~25 중간 $30K~$40K 54 20~25 높음 $30K~$40K … … … … 863 90~ 중간 $200K~ 864 90~ 높음 $200K~ - 빠르게 변화하는 속성값을 가진 대규모 차원 테이블에 적합
- 저장용량을 줄이고 팩트테이블 트랜잭션 시점 이력을 기준으로 매번 Join하는 불필요한 쿼리비용을 감소시킬 수 있음
- 참고: https://velog.io/@qja1357/차원이력관리기법SCD-Type-4
차원이력관리기법(SCD) - Type 4
빠르게 변하는 차원의 속성을 관리하기 위한 차원이력관리기법 Type 4에 대한 포스팅입니다.
velog.io
'데이터 엔지니어링 > 빅데이터' 카테고리의 다른 글
[2. ETL 구축] 2-2. ETL 개발의 10단계 (0) | 2024.04.22 |
---|---|
[2. ETL 구축] 2-1. ETL의 서브시스템 (0) | 2024.04.22 |
[1. 차원 모델링] 1-1. 차원 모델 설계의 4단계 (0) | 2024.04.22 |
Hadoop YARN (0) | 2022.11.30 |
Apache Kafka (0) | 2022.06.07 |