관계 vs 조인 vs 블렌딩

관계는 분석을 위해 여러 테이블에서 데이터를 결합하는 동적이고 유연한 방법입니다.

위 문장은 태블로의 공식 도움말 문서에 있는 관계에 대한 정의입니다. 기존의 테이블 결합 방식인 조인 또는 블렌딩과는 그 작동 방식에 분명한 차이가 있어, 이번 포스팅에서는 태블로의 기존 데이터 결합 방식과 관계를 비교해보고자 합니다.

관계는 무엇인가요?

2020.2 버전부터 지원하며, 다중 테이블 분석을 위해 데이터를 결합하는 방법입니다.

작성하는 방법은 매우 간단합니다. 테이블을 끌어다 놓고,두 테이블 간에 관계가 있는 필드를 정의하면 두 테이블 간에 관계가 생성되었음을 ‘noodle’로 나타냅니다. 여기서 유념할 부분은 두 테이블이 결합된 상태가 아니라는 것입니다. 기존의 조인 작동 방식과 달리, 관계는 결합된 형태로 테이블을 저장하지 않습니다. 관계가 정의된 테이블에서 데이터 미리보기 패널을 보면 관계에서 사용된 테이블 전체를 확인할 방법이 없는 것도 바로 이 때문입니다.

  • Online Class List: 첫 번째 테이블은 등록 가능한 온라인 클래스 목록 및 가격 정보를 담고 있습니다.
  • Online Class Review: 두 번째 테이블은 날짜별로 발생한 각 클래스의 평가 결과 정보를 담고 있습니다.
Relationships by Class Id = Id

버전 2020.2 이상은 테이블 결합의 기본 형태가 관계이므로 드래그해 올리기만 하면 관계를 생성하게 됩니다. 두 테이블 간의 관계는 1:1이 아니지만, Class Id와 Id를 결합함으로써 관계 생성이 가능합니다.

미리보기 패널에서는 개별 테이블만을 선택하여 조회 가능합니다.

그렇다면 두 테이블 간의 조인은 언제 일어날까요? 관계에서 조인은 ‘비주얼라이제이션 작성 단계’에서 일어나게 됩니다. 그 조인의 형태가 이너 조인(inner join)인지, 레프트 조인(left join)인지, 라이트 조인(right join)인지, 아우터 조인(full outer join)인지는 ;뷰’에서 사용된 필드의 관계를 보고 (미리 정의하지 않은 경우) 태블로가 자동으로 적절한 쿼리를 수행합니다.

여기서 잠깐, ‘비주얼라이제이션 작성 단계’의 정의

뷰에서 비주얼라이제이션 작성을 수행합니다.

태블로 도움말을 보시다 보면 ‘비주얼라이제이션 작성 단계’ 또는 ‘뷰’ 라는 단어를 자주 보실텐데요, 바로 여기입니다. 워크시트에서 각 선반에 올려둔 필드의 조합으로 결과가 나타나는 곳, 이 곳을 ‘뷰’라고 부르며, ‘비주얼라이제이션 작성 단계’라는 것은 워크시트에서 시각적 분석을 수행하는 과정을 말합니다.

그래서 무엇이 달라진 것이죠?

첫번째, 비쥬얼라이제이션에서 결과를 나타내는 방식이 매우 구체적인 수준에서 결정됩니다.

예를 들어, 아래 영상은 앞선 예제를 사용해 간단한 시각적 분석을 실행한 결과입니다.

Online Class Review의 Id 필드만 뷰에 존재할 때에는 리뷰 건이 없는 13,20번의 행이 존재하지 않습니다. Online Class List 테이블에서 Class Id를 추가해도 마찬가지 결과입니다. 두 필드에서 모두 존재하는 행만을 나타내네요. 즉 이너조인을 실행한 것입니다.

그런데, Id를 제거하면 뷰에서 사용된 필드를 기준으로 태블로가 필요한 조인을 다시 수행합니다. Online Class List을 기준으로 레프트 조인을 실행한 결과, 이제 13번, 20번이 뷰에 추가됩니다.

보시는 것처럼, 원하는 결과를 예상하기 위해서는 케이스마다 태블로가 어떠한 조인을 실행하는지 알아볼 필요가 있습니다. 이 부분은 태블로 공식 도움말 문서에 케이스별로 정리되어 있어, 해당 문서 링크를 첨부하는 것으로 대체하겠습니다.

두번째, LOD계산을 사용할 필요가 없습니다.

가장 세분화된 행 수준으로 집계 수준이 결정되는 조인과 달리, 관계는 각 테이블의 집계 수준을 보존하고, 뷰에서 자동으로 세부수준계산을 수행해줍니다.

예를 들어, 카테고리별 평균 클래스 가격을 구한다고 가정해보겠습니다.

기존의 조인을 사용하는 경우, Online_Class_Review에 존재하는 Class Id 당 리뷰 건만큼 Price 금액이 복제됩니다. 이를 보완하기 위해서는 워크시트에서 LOD 계산으로 보정된 값을 사용해야 합니다.

관계는 각 테이블의 세부 집계 수준을 유지합니다. Price의 평균을 계산할 때 사용되는 Category와 Price는 모두 Online Class List 테이블에 있는 필드로서, 해당 테이블만 이용하여 계산을 수행합니다.

세번째, 조인 유형은 뷰에 필드를 추가함에 따라 자동으로 결정됩니다.

조인 유형을 생성할 때 관계가 작동하는 방식을 한 마디로 정의하면, “측정값이 뷰에 포함되는 경우 모든 레코드를 표현한다”고 할 수 있습니다. 또한, 앞선 예시에서 보았듯, 워크시트에 어떤 필드를 포함하느냐에 따라, 조인을 다르게 수행합니다. Null에 대해서도 몇 가지 다른 해석 방식을 가지고 있습니다. 어떤 경우에는 Null값을 0으로 자동 해석하고, 어떤 경우에는 Null로 나타냅니다. 이 메커니즘에 대한 이해 없이 관계를 접하는 경우, 계속해서 달라지는 결과에 당혹스러우실 수 있습니다. 하지만 관계는 매우 스마트합니다. 실망하기에 앞서, 반드시 위에서 참조해드린 문서를 참고하기를 추천드립니다.

조인, 블렌딩과는 뭐가 다른가요?

각각의 차이를 테이블로 정리해보았습니다. 이 테이블의 설명은 태블로 컨퍼런스에서 소개된 공식 영상을 정리한 것입니다. 보다 자세한 설명은 이 영상을 참고해주세요.

조인 vs 관계

비교조건조인관계
조인의 집계 수준행 수준
> 집계 수준이 서로 다른 경우,
측정값이 복제됨
테이블을 관계 있는 필드 수준으로
집계한 후, 조인을 실행함
Input 테이블 형태
(결합 실행 전)
물리적 테이블논리적 테이블
Output 테이블 형태
(결합 실행 후)
논리적 테이블여러 개의 테이블이 뷰에서 어떻게 사용되느냐에 따라,
어떠한쿼리를 사용할 것인지에 대한 정의만을 생성함 (noodle의 역할)
조인 유형미리 정의한 형태로 고정됨뷰에 사용된 차원 및 측정값에 따라 유연하게 변경됨

블렌딩 vs 관계

비교 조건블렌딩관계
어느 단계에서 생성되는가워크시트 단계데이터원본 구성 단계
(서버/온라인에의) 공유불가능가능
LOD 계산데이터 원본 간의 LOD 계산 불가능가능
조인 유형레프트 조인모든 유형의 조인 지원
관계된 필드워크시트마다 정의 가능데이터 원본 구성 단계에서 정의됨

조인은 더 이상 필요없는 건가요?

그렇지 않습니다. 여전히 조인을 사용해야할 때가 있습니다. 또한, 관계는 위의 표에서 비교해드린 것처럼 논리적 테이블 간의 결합이기 때문에, 논리적 테이블 자체를 조인으로 구성할 수 있습니다. 조인을 사용하려면 데이터 구성 단계에서 데이터 패널에 올라간 테이블을 더블클릭합니다. 그 다음에 조인을 실행할 테이블을 추가하면 됩니다.

태블로의 새로운 데이터 모델, 관계. 유연하게 사용하시는 데 이 포스트가 도움이 되었기를 바랍니다.

댓글 남기기

태블로위키만의 새로운 소식, 놓칠 수 없겠죠?