태블로(tableau) BI(Business Intelligence) 툴에서는 다양한 형태의 데이터들을 연동하여 분석할 수 있다.
엑셀 파일, csv 파일, MySQL, Oracle, HDFS, HIVE, Google drive, drop box 등...
1회성으로 분석하고 끝날 것이 아니라 엔터프라이즈 환경에서 지속적으로 사용할 시스템을 만들려면
데이터 구성을 잘 해둘 필요가 있는데 이를 위한 내용을 정리해본다.
아직 그렇게 경험이 많지 않지만 알아가고 있는 내용을 정리하는 것이다.
데이터 원본을 구성할 때 단일 테이블로만 구성할 때는 크게 고민할 것이 없는데
여러 테이블을 묶어서 데이터 원본을 구성할 때는 좀 생각해봐야할 부분들이 있다.
일단 테이블을 연결하는 방법에는 조인과 관계 방식이 있다.
조인은 RDBMS에서 사용되는 조인의 개념과 동일하다고 보면 된다.
조인키를 가지고 테이블을 조인하여 물리적으로 하나의 테이블로 만들게 된다.
그리고 조인 유형(inner, left outer, right outer, full outer)도 선택해야 한다.
반면에 관계는 물리적으로 하나의 테이블로 만들지 않고
조인키를 가지고 논리적으로만 연결 고리를 만들어 놓고 실제 사용할 때 동적으로 연결되는 방식이다.
처음에는 조인 방식만 있었으나 2020.3 버전 정도부터 관계 방식이 등장하였다.
태블로 가이드 문서 상에는 관계의 장점이 많기 때문에 기본적으로 관계 방식 사용을 권장하고
적합하지 않은 경우들에 대해서 조인 방식을 사용하라고 이야기하고 있다.
하지만 몇 달 사용해보니 항상 관계 방식이 좋은 것은 아니다.
일단 관계 방식의 장점은 데이터의 수준이 고정되어있지 않다는 것인데 무슨 말이냐 하면
예를 들어, 직원과 부서 테이블을 조인해서 다음과 같은 하나의 테이블로 만들었다고 하자.
emp_no | emp_name | age | dept_no | dept_name | dept_emp_count |
1 | 김명주 | 35 | 1 | 구매 | 6 |
2 | 박주영 | 39 | 2 | 마케팅 | 8 |
3 | 김선숙 | 46 | 2 | 마케팅 | 8 |
직원과 부서는 N : 1 관계이기 때문에 조인을 하면 데이터는 직원 단위로 만들어진다.
이 테이블로 태블로에서 부서 정보를 보려고 하면 부서 정보가 중복으로 들어가있기 때문에 중복에 대한 처리를 해줘야 한다.
예를 들어, 부서별 직원수를 보려고 하면 SUM(dept_emp_count)이 아니라 ATTR(detp_emp_count)를 해야한다.
이렇게 할 수 있으려면, 데이터 수준에 대한 이해를 해야하고 이것을 하지 않으려면 부서 기준의 데이터 원본이 중복으로 필요하다.
관계 방식은 논리적으로만 연결되어 있어서 부서 정보를 볼 때 저런 고려를 하지 않아도 된다.
그래서 다양한 데이터 수준을 가진 테이블들을 조인해서 사용할 때 편리하게 사용할 수 있는 장점이 있다.
단, 조인 방식(inner, outer)에 대한 지정도 명시적으로 하지 않기 때문에 사용 방식에 따라서 그것 또한 동적으로 결정되기 때문에 그런 부분도 상세하게 컨트롤하려면 그 부분에 대한 것도 알고 있어야 한다.
www.tableau.com/about/blog/2020/5/relationships-part-1-meet-new-tableau-data-model
하지만 관계 방식이 모든 경우에 다 좋은 것은 아닌데,
여러 종류 DB를 연결하는 경우, 예를 들자면 RDBMS와 Hive 테이블 묶어서 구성한다던지 하면 좋은 성능을 내기 어렵다고 한다.
한 종류의 DB에 있는 테이블들로 구성할 때는 관계가 좋은 선택이 될 수 있을 것 같다.
만약 데이터양이 RDBMS로 감당하기 힘든 경우라면 Hive 같은 Hadoop 시스템에 데이터들을 모두 모아두고 연동하는게 좋을 선택일 듯 하다.
'개발 > Data Engineering' 카테고리의 다른 글
Apache Hudi 소개 - HDFS upsert/delete (0) | 2021.07.11 |
---|---|
Avro와 Parquet (0) | 2021.06.24 |
HDFS 네임노드 OutOfMemory 에러 (0) | 2016.09.27 |
직접해보는 하둡 프로그래밍 - 1. 빅데이터와 하둡이해하기 - 하둡이해하기 (0) | 2016.09.25 |
hdfs에서 name node is safe mode 라고 나올 때 (0) | 2016.09.22 |