[BIGDATA] 2-4 데이터 마트의 기본 구조
빅데이터의 탐색
데이터 마트의 기본 구조
BI 도구에서 대화형으로 데이터를 참고하려고 하면, 시각화에 필요한 정보만을 모은 데이터 마트가 필수적이다.
시각화에 적합한 데이터 마트 만들기 - OLAP
BI 도구에 있어서 핵심적인 개념 중 하나로 ‘OLAP(online analytical processing)’라는 구조가 있다.
데이터 디스커버리를 위한 BI 도구는 OLAP의 개념을 몰라도 사용할 수 있도록 고안되어 있기 때문에 그 존재를 의식할 일은 거의 없지만, 데이터 마트를 구축할 때는 다소 사전 지식이 필요하다.
다차원 모델과 OLAP 큐브
OLAP는 데이터 집계를 효율화하는 접근 방법 중의 하나다.
OLAP는 ‘다차원 모델’의 데이터 구조를 ‘MDX(multidimensional expressions)’ 등의 쿼리 언어로 집계한다.
데이터 분석을 위해 만들어진 다차원 데이터를 ‘OLAP 큐브(OLAP cube)’라고 부르며, 그것을 크로스 집계하는 구조가 OLAP다.
BI 도구는 본래 OLAP의 구조를 사용하여 데이터를 집계하기 위한 소프트웨어다.
따라서, 데이터 마트도 이전에는 OLAP 큐브로 작성되어 있었다.
MPP 데이터베이스와 비정규화 테이블
최근에는 OLAP 큐브를 위해 특별한 구조를 준비하는 것이 아니라, BI 도구와 MPP 데이터베이스를 조합하여 크로스 집계하는 경우가 증가하고 있다.
BI 도구로 생각한 대로의 그래프를 만들기 위해서 만들고 싶은 그래프에 맞추어 ‘다차원 모델’을 설계한다.
그러나 MPP 데이터베이스에 다차원 모델의 개념은 없기 때문에 이를 대신해 ‘비정규화 테이블’을 준비한다.
그렇게 만든 비정규화 테이블을 BI 도구에서 열어서 기존의 OLAP와 동등한 시각화를 실현할 수 있다.
‘시각화에 적합한 데이터 마트를 만드는 것’은, 이렇게 ‘BI 도구를 위한 비정규화 테이블을 만드는’ 프로세스다.
테이블을 비정규화하기
데이터베이스의 설계에서는 종종 테이블을 ‘마스터’와 ‘트랜잭션’으로 구분한다.
시간과 함께 생성되는 데이터를 기록한 것이 ‘트랜잭션(transaction)’이며, 트랜잭션에서 참고되는 각종 정보가 ‘마스터(master)’다.
트랜잭션은 한 번 기록하면 변화하지 않지만, 마스터는 상황에 따라 다시 쓰인다.
트랜잭션과 마스터로 이루어진 테이블 관계은 RDB에서는 일반적인 ‘관계형 모델(relational model)’이다.
데이터 분석의 경우에는 정규화된 관계형 모델에서 출발해서 그와는 반대의 작업을 실행한다.
팩트 테이블과 디멘전 테이블
데이터 웨어하우스의 세계에서는 트랜잭션처럼 사실이 기록된 것을 ‘팩트 테이블(fact table)’이라고 하고, 거기에서 참고되는 마스터 데이터 등을 ‘디멘전 테이블(dimension table)’이라고 한다.
스타 스키마와 비정규화 (팩트 테이블을 중심으로 여러 디멘전 테이블을 결합)
데이터 마트를 만들 때는 팩트 테이블을 중심으로 여러 디멘전 테이블을 결합하는 것이 좋다.
그림으로 그리면 별 모양이 되므로, 이를 ‘스타 스키마(star schema)’라고 부른다.
디멘전 테이블을 작성하려면 정규화에 의해 분해된 테이블을 최대한 결합하여 하나의 테이블로 정리한다.
그 결과로 데이터가 중복되어도 괜찮다.
정규화와는 반대의 작업을 하므로 이를 ‘비정규화(demormalization)’라고 한다.
데이터 마트에서 스타 스키마가 사용되는 데는 두 가지 이유가 있다.
하는 단순하기 때문에 이해하기 쉽고, 데이터 분석을 쉽게 할 수 있다는 점이다.
쿼리 작성법이 정해져 있으므로 SQL을 자동 생성하기 쉬워 BI 도구는 스타 스키마의 테이블에 효율적으로 쿼리를 실행할 수 있도록 디자인되어 있다.
다음은 스타 스키마의 테이블을 SQL로 결합하는 쿼리다.
SELECT ...
FROM 판매 이력
LEFT JOIN 상품 ON 상품.상품 ID = 판매 이력.상품 ID
LEFT JOIN 점포 ON 점포.점포 ID = 판매 이력.점포 ID
;
또 하나는 성능상의 이유다.
데이터양이 증가함에 따라 팩트 테이블은 디멘전 테이블보다도 훨씬 커져 그 데이터양이 집계 시간을 좌우한다.
팩트 테이블이 메모리 용량을 초과한 시점에서 디스크 I/O가 발생하고 그 대기 시간이 쿼리의 지연으로 이어진다.
따라서, 팩트 테이블을 될 수 있는 한 작게 하는 것이 고속화에 있어서 중요하며, 팩트 테이블에는 ID와 같은 키만을 남겨두고 그 외의 나머지는 디멘전 테이블로 옮긴다.
비정규화 테이블 (데이터 마트에 정규화는 필요 없다)
열 지향 스토리지는 칼럼 단위로 데이터가 저장되므로 칼럼의 수가 아무리 늘어나도 성능에 영향을 주지 않는다.
그렇다면 처음부터 팩트 테이블에 모든 칼럼을 포함해두고, 쿼리의 실행 시에는 테이블 결합을 하지 않는 편이 간단하다.
게다가, 열 지향 스토리지는 칼럼 단위로의 데이터 압축이 있다.
문자열을 그대로 저장해도 아주 작게 압축되므로 디스크 I/O의 증가는 억제된다.
그렇기에 데이터를 디멘전 테이블로 이동시킬 이유가 거의 없어져 ‘하나의 거대한 팩트 테이블’만 있으면 충분하다.
데이터 마트에 스타 스키마가 사용된 것은 과거의 이야기이며, 적어도 성능상의 문제는 열 지향 스토리지에 의해 해결된다.
스타 스키마에서 좀 더 비정규화를 진행해 모든 테이블을 결합한 팩트 테이블을 ‘비정규화 테이블(‘denormalized table)’이라고 부른다.
대부분의 경우, 데이터 마트는 비정규화 테이블로 하는 것이 가장 단순하며, 충분히 효율적인 방법이다.
열 지향이 아닌 데이터베이스를 사용하는 경우에는 비정규화 테이블은 데이터의 양이 증가하기 때문에 바람직하지 않지만, 그래도 수백만 레코드 정도의 스몰 데이터라면 문제 되지 않을 것이다.
#### 데이터 웨어하우스와 스타 스키마 데이터 마트가 아니라 ‘데이터 웨어하우스의 테이블 구조’로는 스타 스키마가 우수하다. 데이터를 축적하는 단계에서는 팩트 테이블과 디멘전 테이블로 분리해두고 그것을 분석하는(데이터 마트를 만드는) 단계가 된 후에 결합해 비정규화 테이블을 만든다.
다차원 모델 시각화에 대비하여 테이블을 추상화하기
비정규화 테이블을 준비했다면 그것을 ‘다차원 모델(multidimensional model)’에 의해 추상화한다.
다차원 모델은 칼럼을 ‘디멘전(dimension)’과 ‘측정값(measure)’으로 분류한다.
숫자 데이터와 그 집계 방법을 정의하는 것이 측정값이며, 크로스 집계에 있어서의 행과 열을 이용하는 것이 디멘전이다.
다차원 모델의 디멘전이란 ‘2차원’ 등의 단어로 사용되는 차원(dimension)이다.
원래의 데이터가 다수의 디멘전으로 이루어진 다차원 공간임을 고려할 때, 그것을 행과 열로 구성된 2차원 테이블로 표현한 것이 크로스 집계다.
모델의 정의 확장
BI 도구를 이용한 데이터의 시각화는 일반적으로 다음과 같은 절차를 밟는다.
우선, 시각화하고 싶은 측정값 및 디멘전을 결정한다.
예를 들어, 월별로 상품의 매출을 알고 싶다면 ‘금액’이 측정값이고, ‘판매일’과 ‘상품명’이 디멘전이다.
데이터 마트에 비정규화 테이블을 만들고 그것을 BI 도구로 시각화한다.
그래프를 보고 있는 사이에 상품을 그룹으로 분류해서 집계하고 싶어졌다고 하자.
그때는 비정규화 테이블에 새로운 칼럼을 추가하고 거기에 제품 그룹을 써놓는다.
이제 새로운 디멘전이 추가되므로 이를 사용하여 새 그래프를 만든다.
이처럼 다차원 모델의 정의는 나중에 확장할 수 있다.
이렇게 만들어진 비정규화 테이블을 모은 것이 BI 도구를 위한 데이터 마트다.
워크플로 관리 도구 등을 이용해서 데이터 마트를 정기적으로 자동 업데이트함으로써 일상적인 데이터의 움직임을 확인할 수 있다.
#### 브레이크 다운 분석 BI 도구에서 데이터를 볼 때 어떤 숫자가 어디에서 오는 것인지 그 내역을 파악하고 싶을 때가 많다. 복잡한 데이터를 분석하기 쉽게 하려면 데이터를 몇 개의 그룹(또는 카테고리나 클러스터 등)으로 분산하여 각 그룹에 내용을 정리하는 것이 효과적이다. 이것을 ‘브레이크 다운 분석(breakdown analysis)’이라고 한다.
브레이크 다운 분석에서는 데이터를 분류하기 위해 전용의 디멘전을 팩트 테이블에 추가하고, 거기에 그룹명을 써넣는다.
예를 들어, '속성 1'을 그룹명으로, '속성 2'를 서브 그룹명으로 해서 그룹별로 개별 대시보드를 작성한다.
구체적으로는 대시보드를 만들 때 필터링 조건으로 '속성 1"=A"'와 같은 식을 지정함으로써 해당 그룹에 속한 레코드만이 확실하게대시보드 집계에 포함되도록 한다.
그러면 각 레코드는 반드시 어딘가 하나의 그룹에 속하기 때문에 모든 레코드를 빠짐없이 하나의 대시보드에 분류할 수 있다.