본문 바로가기
DataBase/Data & SQL

[Data] 데이터 마트의 구축(치환, 추가, 스냅샷 테이블, 이력테이블)

by 스파이디웹 2021. 8. 8.
728x90

이번 포스트에서는 '시각화를 위해 데이터 마트를 만드는 절차'에 대해서 포스트 하겠습니다.


팩트 테이블

-팩트 테이블의 작성에는 추가(append)치환(replace) 가 있다.

 

-추가: 새로 도착한 데이터만을 증분으로 추가

INSERT INTO 를 통해 기존의 테이블에 데이터가 추가되는 형태

 

-치환: 과거의 데이터를 포함하여 테이블 전체를 치환한다.

DROP TABLE IF EXISTS tablename 을 통해 삭제 후,

CREATE TABLE IF NOT EXISTS tablename을 통해 다시 만드는 과정이 '치환'


테이블 파티셔닝(table partitioning)

-효율만을 생각 했을 때는 추가가 압도적으로 유리,

하지만 단점 또한 존재

 

단점

1. 추가에 실패한 것을 알아채지 못하면 팩트 테이블의 일부에 결손이 발생

2. 추가를 잘못해서 여러 번 실행하면 팩트 테이블의 일부가 중복된다.

3. 나중에 팩트 테이블을 다시 만들고 싶은 경우의 관리가 복잡해진다.

 

-이런 문제점을 극복하기 위해 테이블 파티셔닝을 사용

 

-하나의 테이블을 여러 물리적인 파티션으로 나눔으로써 파티션 단위로 정리하여 데이터를 쓰고 삭제

 

-일반적으로 시계열 데이터(1일 1회 단위, 시간단위)

ex)

base_dt=20210807

base_tm=00

과 같은 시간단위로 파티셔닝

 

-각 파티션은 멱등성을 위해 매번 교체하도록 이미 존재한다면 덮어쓴다.

 


집계 테이블

-레코드 수 줄이기

 

-팩트 테이블을 어느 정도 모아서 집계하면 데이터의 양이 크게 줄어든다(집계 테이블(summary table))

 

-특히 데이터를 1일 단위로 집계한 일일 집계는 일일 보고서를 만드는 과정에서 자주 사용된다.

 

레코드 수 줄이는 과정

1.일정의 시간 간격으로 집계한다 - GROUP BY 로 집계하여 일일의 합계를 미리 계산한다.

2.불필요한 정보를 제거한다 - SELECT DISTINCT로 중복을 없애고 거기로부터 고유 수를 계산한다.

 

-각 컬럼이 취하는 값의 범위를 '카디널리티(cardinality)'라고 한다.

ex)

'성별'은 카디널리티가 작다, 남,녀

'IP 주소'는 카디널리티가 크다, 여러 ip주소들

 

-집계 테이블을 작게 하려면 모든 컬럼의 카디널리티를 줄여야 한다.


스냅샷 테이블

-마스터의 상태를 기록하기

 

*마스터 데이터

https://spidyweb.tistory.com/264

 

-마스터 데이터처럼 업데이트될 가능성이 있는 테이블에 대해서는 두 가지 방안이 있다.

1. 정기적으로 테이블을 통째로 저장하는 방법 '스냅샷 테이블'

2. 변경 내용만을 저장하는 방법 '이력 테이블'

 

-차후에 분석을 생각하면 스냅샷 테이블 쪽이 취급하기 쉽다.

 

-스냅샷 테이블은 시간이 지남에 따라 점점 커지므로 이것도 일종의 팩트 테이블로 간주

 

-스냅샷 테이블은 다른 팩트 테이블과 결합함으로써 디멘전 테이블로도 사용할 수 있다.

 

-스냅샷은 특정 시점의 테이블의 상태를 기록한 것이므로 나중에 다시 만들 수 없다는 특징이 있다.

 

-스냅샷 테이블은 데이터 레이크나 데이터 웨어하우스와 같은 영구적인 저장소에 보관하여 삭제되지 않도록 주의


이력 테이블

-마스터 변화 기록하기

 

-정기적으로 모든 데이터를 스냅샷 하는 것이 아니라 변경된 데이터만을 증분으로 스냅샷 하거나 변경이 있을 때마다 그 내용을 기록


디멘전을 추가하여 비정규화 테이블 완성

-마지막 단계로 팩트 테이블과 디멘전 테이블을 결합하여 비정규화 테이블을 만든다.

 

-디멘전 테이블로는 스냅샷을 사용할 뿐만 아니라 목적에 따라 각종 중간 테이블이 만들어진다.

 

-시각화에 적합한 디멘전만 남기고 집계한다.

 

 

728x90

댓글