데이터 마트의 구축
팩트 테이블(Fact Table)
데이터 분석의 시작은 데이터를 구조화입니다. 많은 정보를 담고 있는 팩트 테이블은 데이터 분석의 많은 부분을 차지하고 있습니다.
팩트 테이블의 크기가 작다면 메모리에 올릴 수 있지만 빅데이터의 경우에는 팩트 테이블의 크기가 커서 열 지향 스토리지에서 데이터를 압축해야 빠른 집계를 할 수 있습니다.
새로운 데이터가 들어왔을 때 팩트 테이블은 추가(append), 치환(replace) 두 가지의 작성방법이 있습니다.
추가(append)는 새로 도착한 데이터만 기존의 데이터에 추가해주는 방식이고 치환(replace)은 과거의 데이터와 새로운 데이터를 포함하여 테이블 전체를 치환하는 방식입니다.
테이블 파티셔닝
효율면에서는 추가(append)가 유리합니다. 하지만 추가(append)에는 아래의 문제점이 존재합니다.
- 추가에 실패한 것을 알아채지 못한 팩트 테이블의 일부에 결손이 발생한다.
- 추가를 잘못해서 여러 번 실행하면 팩트 테이블의 일부가 중복된다.
- 나중에 팩트 테이블을 다시 만들고 싶은 경우의 관리가 복잡해진다.
위의 이런 문제가 일어날 가능성을 줄이기 위하여 테이블 파티셔닝(table partitions) 기술을 사용합니다.
테이블 파티셔닝은 하나의 테이블을 여러 물리적인 파티션으로 나누어 파티션 단위로 정리하여 데이터를 쓰거나 삭제할 수 있는 것을 말합니다.
일반적으로 1일 1회, 또는 1시간에 1회 정도 자주 새 파티션을 만들고 그것을 데이터 마트의 팩트테이블에 붙여놓습니다.
파티션이 이미 존재한다면 덮어쓰고 교체해야되는 파티션은 매번 교체하도록 합니다. 이런식으로 파티션을 갱신하면 데이터가 중복될 가능성을 배제하면서 잘못된 데이터의 기록을 바로 잡을 수 있습니다.
데이터 마트의 치환
거대한 테이블을 만드는 테이블 파티셔닝은 데이터 웨어하우스를 구축하는데 도움이 됩니다. 하지만 비교적 규모가 작은 데이터 마트를 구축하는 경우에는 테이블을 치환하는 방식이 더 유리할 수 있습니다.
팩트 테이블 전체를 치환하게 되면 중간에 데이터가 중복되거나 빠질 위험이 거의고 테이블을 처음부터 다시 만들고 싶다면 쿼리를 한번만 실행하면 되는 장점이 있습니다. 스키마를 변경하는 경우에도 대응하기가 좋습니다.
하지만 데이터의 양이 많아 처리시간이 길어진다면 데이터 마트를 구축하는 방법 또한 테이블 파티셔닝을 실시하거나 기존 테이블에 추가(append)하여 모니터링을 주의깊게 해야할 것 입니다.
집계 테이블(Summary table)
팩트 테이블을 어느 정도 모아서 데이터를 집계하면 데이터의 양이 크게 줄어듭니다.
이런 테이블을 집계 테이블이라 하며 데이터를 1일 단위로 집계한 일일집계(daily summary)는 일일보고서에 많이 사용됩니다.
집계테이블은 분석에 필요한 칼럼을 골라 숫자 데이터를 집계하여 만들 수 있습니다. 이때 칼럼이 취하는 값의 범위를 나타내는 카디널리티(cardinality)가 높게 나올 수 있는데 집계 테이블을 작게 만드려면 이러한 카디널리티를 줄여야합니다.
- 성별과 같이 취할 수 있는 값이 적은 것은 카디널리티가 작습니다.
- IP주소, 주민등록번호처럼 취해야할 값이 많은 것은 카디널리티가 큽니다.
주민등록번호는 성별, IP주소는 국가나 지역으로 변환하여 카디널리티를 줄여야 집계테이블에 생성되는 레코드 수를 줄일 수 있습니다.
하지만 카디널리티를 너무 무리하게 낮추면 정보가 손실될 수 있기 때문에 분석에 필요한 정보만 남겨두고 카디널리티를 줄여야합니다.
스냅샷 테이블과 이력테이블
마스터 테이블처럼 업데이트될 가능성이 있는 테이블은 정기적으로 테이블을 통째로 저장하는 방법인 스냅샷 테이블과 변경 내용만을 저장하는 방법인 이력테이블이 있습니다.
스냅샷 테이블은 특정 시점의 테이블의 상태를 기록한 것이기 때문에 나중에 다시 만들기 어렵습니다.
스냅샷 테이블은 데이터 레이크나 데이터 웨어하우스와 같은 영구적인 저장소에 보관해야 합니다.
이력테이블의 경우에는 스냅샷 테이블과 비교했을 때 데이터의 양을 줄이는데 도움이 되지만, 어느 순간의 완전한 마스터 테이블을 나중에 복원하는 것이 어려워지므로 디멘전 테이블로는 사용하기가 어렵습니다.
'데이터 엔지니어링' 카테고리의 다른 글
[빅데이터를 지탱하는 기술] 빅데이터의 축적 # 2 (0) | 2023.05.27 |
---|---|
[빅데이터를 지탱하는 기술] 빅데이터의 축적 # 1 (0) | 2023.05.26 |
[빅데이터를 지탱하는 기술] 대규모 분산 처리의 프레임워크 # 4 (0) | 2023.05.23 |
[빅데이터를 지탱하는 기술] 대규모 분산 처리의 프레임워크 # 3 (1) | 2023.05.22 |
[빅데이터를 지탱하는 기술] 대규모 분산 처리의 프레임워크 # 2 (0) | 2023.05.19 |