이번 포스트에서는 '시각화를 위해 데이터 마트를 만드는 절차'에 대해서 포스트 하겠습니다.
팩트 테이블
-팩트 테이블의 작성에는 추가(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. 변경 내용만을 저장하는 방법 '이력 테이블'
-차후에 분석을 생각하면 스냅샷 테이블 쪽이 취급하기 쉽다.
-스냅샷 테이블은 시간이 지남에 따라 점점 커지므로 이것도 일종의 팩트 테이블로 간주
-스냅샷 테이블은 다른 팩트 테이블과 결합함으로써 디멘전 테이블로도 사용할 수 있다.
-스냅샷은 특정 시점의 테이블의 상태를 기록한 것이므로 나중에 다시 만들 수 없다는 특징이 있다.
-스냅샷 테이블은 데이터 레이크나 데이터 웨어하우스와 같은 영구적인 저장소에 보관하여 삭제되지 않도록 주의
이력 테이블
-마스터 변화 기록하기
-정기적으로 모든 데이터를 스냅샷 하는 것이 아니라 변경된 데이터만을 증분으로 스냅샷 하거나 변경이 있을 때마다 그 내용을 기록
디멘전을 추가하여 비정규화 테이블 완성
-마지막 단계로 팩트 테이블과 디멘전 테이블을 결합하여 비정규화 테이블을 만든다.
-디멘전 테이블로는 스냅샷을 사용할 뿐만 아니라 목적에 따라 각종 중간 테이블이 만들어진다.
-시각화에 적합한 디멘전만 남기고 집계한다.
'DataBase > Data & SQL' 카테고리의 다른 글
[SQL] MySQL의 Binding Variables, 바인딩 변수 사용법(mysql,python), 장점 (1) | 2023.01.10 |
---|---|
프로그래밍 언어별 '(홑 따옴표, single quotation) vs "(쌍 따옴표, double quotation) (0) | 2022.06.08 |
[Data] 마스터 데이터 vs 트랜잭션 데이터, fact테이블 vs dimension 테이블, 시계열 데이터란? (0) | 2021.08.06 |
[Data] 데이터 레이크(data lake)란? (0) | 2021.08.06 |
[SQL] NULL 과 NULL처리 함수,연산자 (2) | 2021.03.04 |
댓글