조인을 사용하면 서로 다른 뷰를 연결하여 둘 이상의 뷰에서 동시에 데이터를 탐색하고 데이터의 여러 부분이 서로 어떻게 연관되어 있는지 확인할 수 있습니다.
예를 들어 데이터베이스에 order_items
, orders
, users
테이블이 포함될 수 있습니다. 조인을 사용하여 모든 테이블의 데이터를 동시에 탐색할 수 있습니다. 이 페이지에서는 특정 조인 매개변수와 조인 패턴을 포함하여 LookML의 조인을 설명합니다.
참여는 탐색으로 시작
조인은 모델 파일에서 정의되며, 탐색과 뷰 간의 관계를 설정합니다. 조인은 단일 탐색에 직접 또는 연결된 다른 뷰를 통해 하나 이상의 보기를 연결합니다.
두 개의 데이터베이스 테이블인 order_items
과 orders
을 살펴보겠습니다. 두 테이블의 뷰를 생성한 후 모델 파일의 explore
매개변수에서 하나 이상의 뷰를 선언합니다.
explore: order_items { ... }
order_items
탐색에서 쿼리를 실행하면 생성된 SQL의 FROM
절에 order_items
가 나타납니다.
SELECT ...
FROM order_items
order_items
탐색에 추가 정보를 포함할 수 있습니다. 예를 들어 order_item
가 속한 order
에 관한 데이터를 추가하려면 다음과 같이 하면 됩니다.
explore: order_items {
join: orders {
type: left_outer
relationship: many_to_one
sql_on: ${order_items.order_id} = ${orders.id} ;;
}
}
위의 LookML은 두 가지 작업을 실행합니다. 먼저 UI에서 orders
및 order_items
의 필드를 모두 볼 수 있습니다.
둘째, LookML은 orders
과 order_items
를 함께 연결하는 방법을 설명합니다. 이 LookML은 다음 SQL로 변환됩니다.
SELECT ...
FROM order_items
LEFT JOIN orders
ON order_items.order_id = orders.id
이러한 LookML 매개변수는 다음 섹션에서 더 자세히 설명합니다. 이 LookML이 SQL로 변환되는 방법에 대한 자세한 내용은 join
매개변수 참조 페이지를 확인하세요.
채팅팀 도움말: 사용자는 조인 누락으로 인해 발생할 수 있는 유효성 검사 오류, '알 수 없음 또는 액세스할 수 없는 필드'에 대해 가장 많이 물어봅니다. 자세한 내용은 이 오류에 관한 고객센터 도움말을 참고하세요.
조인 매개변수
조인에 사용되는 4가지 기본 매개변수는 joins
, join
, type
, relationship
, sql_on
입니다.
1단계: 탐색 시작하기
먼저 order_items
탐색 분석을 만듭니다.
explore: order_items { ... }
2단계: join
테이블을 조인하려면 먼저 뷰에서 선언해야 합니다. 이 예에서 orders
는 모델의 기존 뷰입니다.
그런 다음 join
매개변수를 사용하여 orders
뷰를 order_items
에 조인하겠다고 선언합니다.
explore: order_items {
join: orders { ... }
}
3단계: type
실행할 조인의 type
를 고려합니다. Looker는 LEFT JOIN
, INNER JOIN
, FULL OUTER JOIN
, CROSS JOIN
를 지원합니다. 이는 left_outer
, inner
, full_outer
, cross
의 type
매개변수 값에 해당합니다.
explore: order_items {
join: orders {
type: left_outer
}
}
type
의 기본값은 left_outer
이며 일반적으로 많이 사용되는 조인 유형입니다.
4단계: relationship
order_items
와 orders
사이에 조인 relationship
을 정의합니다. Looker에서 정확한 측정을 계산하려면 조인의 relationship
를 올바르게 선언하는 것이 중요합니다. 관계는 order_items
탐색에서 orders
뷰 ~로 정의됩니다. 가능한 옵션은 one_to_one
, many_to_one
, one_to_many
, many_to_many
입니다.
이 예시에서는 단일 order
에 여러 order_items
가 있을 수 있습니다. order_items
에서 orders
로의 관계는 many_to_one
입니다.
explore: order_items {
join: orders {
type: left_outer
relationship: many_to_one
}
}
조인에 relationship
를 포함하지 않으면 Looker의 기본값은 many_to_one
입니다.
조인에 맞게 relationship
매개변수를 올바르게 정의하는 방법에 관한 추가 도움말은 relationship
매개변수를 올바르게 가져오기 고객센터 도움말을 참고하세요.
5단계: sql_on
이 두 테이블을 sql_on
또는 foreign_key
매개변수와 함께 조인하는 방법을 선언합니다. 일반적으로 sql_on
이 foreign_key
이 할 수 있는 모든 작업을 할 수 있기 때문에 이해하는 것이 좋습니다.
sql_on
은 쿼리에 대해 생성된 SQL의 ON
절과 같습니다. 이 매개변수를 사용하면 조인을 수행하기 위해 매칭해야 하는 필드를 선언할 수 있습니다.
explore: order_items {
join: orders {
type: left_outer
relationship: many_to_one
sql_on: ${order_items.order_id} = ${orders.id} ;;
}
}
더 복잡한 조인을 작성할 수도 있습니다. 예를 들어 id
이 1, 000보다 큰 주문만 조인할 수 있습니다.
explore: order_items {
join: orders {
type: left_outer
relationship: many_to_one
sql_on: ${order_items.order_id} = ${orders.id} AND ${orders.id} > 1000 ;;
}
}
이 예에서 ${ ... }
구문에 대한 자세한 내용은 대체 연산자를 참고하세요.
6단계: 테스트
주문 항목 탐색으로 이동하여 이 조인이 예상대로 작동하는지 테스트합니다. order_items
와 orders
의 필드가 모두 표시됩니다.
LookML 변경사항 테스트에 관해 자세히 알아보려면 모델 개발을 참조하세요.
다른 뷰를 통해 참여
다른 보기를 통해 탐색에 보기에 참여할 수 있습니다. 위의 예시에서는 order_id
필드를 통해 orders
에 order_items
를 조인했습니다. 공통 필드를 공유하지 않더라도 users
라는 뷰의 데이터를 order_items
탐색 분석에 조인할 수도 있습니다. orders
뷰를 통해 조인하면 됩니다.
sql_on
또는 foreign_key
을 사용하여 order_items
대신 orders
에 users
를 조인합니다. orders
의 필드를 orders.user_id
로 올바르게 범위를 지정하면 됩니다.
다음은 sql_on
를 사용하는 예입니다.
explore: order_items {
join: orders {
type: left_outer
relationship: many_to_one
sql_on: ${order_items.order_id} = ${orders.id} ;;
}
join: users {
type: left_outer
relationship: many_to_one
sql_on: ${orders.user_id} = ${users.id} ;;
}
}
두 번 이상 뷰에 참여
users
뷰에는 구매자와 판매자 모두의 데이터가 포함됩니다. 이 보기에서 order_items
로 데이터를 결합하지만 구매자와 판매자에 대해 개별적으로 조인하려면 from
매개변수를 사용하여 다른 이름으로 users
를 두 번 조인할 수 있습니다.
from
매개변수를 사용하면 조인에 사용할 뷰를 지정하면서 조인에 고유한 이름을 지정할 수 있습니다. 예를 들면 다음과 같습니다.
explore: order_items {
join: orders {
type: left_outer
relationship: many_to_one
sql_on: ${order_items.order_id} = ${orders.id} ;;
}
join: buyers {
from: users
type: left_outer
relationship: many_to_one
sql_on: ${orders.buyer_id} = ${buyers.id} ;;
}
join: sellers {
from: users
type: left_outer
relationship: many_to_one
sql_on: ${orders.seller_id} = ${sellers.id} ;;
}
}
이 경우 구매자 데이터만 buyers
로 조인되고 판매자 데이터만 sellers
로 조인됩니다.
참고: 이제 users
뷰가 조인에서 별칭 buyers
및 sellers
으로 참조되어야 합니다.
조인에서 필드 제한
fields
매개변수를 사용하면 조인에서 탐색으로 가져올 필드를 지정할 수 있습니다. 기본적으로 뷰의 모든 필드는 조인될 때 가져옵니다. 하지만 일부 필드만 가져오는 것이 좋습니다.
예를 들어 orders
가 order_items
에 조인되면 조인을 통해 shipping
및 tax
필드만 가져오는 것이 좋습니다.
explore: order_items {
join: orders {
type: left_outer
relationship: many_to_one
sql_on: ${order_items.order_id} = ${orders.id} ;;
fields: [shipping, tax]
}
}
[set_a*]
와 같은 필드를 참조할 수도 있습니다. 각 세트는 set
매개변수를 사용하여 뷰 내에 정의됩니다. orders
뷰에 다음 집합이 정의되어 있다고 가정해 보겠습니다.
set: orders_set {
fields: [created_date, shipping, tax]
}
orders
에 order_items
를 조인할 때 다음 세 가지 필드만 가져오도록 선택할 수 있습니다.
explore: order_items {
join: orders {
type: left_outer
relationship: many_to_one
sql_on: ${order_items.order_id} = ${orders.id} ;;
fields: [orders_set*]
}
}
대칭 집계
조인은 조인으로 인해 팬아웃이 발생하더라도 '대칭 집계'라고 하는 특성으로 집계 (예: 합계 및 평균)를 정확하게 계산합니다. 대칭 집계는 대칭 집계에 대한 간단한 설명 고객센터 도움말에 자세히 설명되어 있으며, 팬아웃 문제는 SQL 팬아웃 문제 도움말에 설명되어 있습니다.
기본 키는 필수 항목입니다.
조인을 통해 집계 (집계)를 수행하려면 조인과 관련된 모든 뷰에서 기본 키를 정의해야 합니다.
이렇게 하려면 각 뷰의 기본 키 필드 정의에 primary_key
매개변수를 추가하면 됩니다.
dimension: id {
type: number
primary_key: yes
}
조인된 조치를 올바르게 처리하기 위해 Looker에서는 NULL이 아닌 완전히 고유한 값을 갖는 기본 키를 지정합니다. 데이터에 기본 키가 포함되어 있지 않은 경우 여러 필드를 연결하면 완전히 NULL이 아닌 고유한 값의 기본 키가 될 수 있는지 고려하세요. 기본 키가 고유하지 않거나 NULL 값을 포함하고 있고 쿼리에 이러한 문제를 드러내는 데이터가 포함되어 있는 경우 Looker는 이 고객센터 도움말에 설명된 대로 오류를 반환합니다.
지원되는 SQL 언어
Looker 프로젝트에서 대칭 집계를 지원하려면 데이터베이스 언어에서도 대칭 집계를 지원해야 합니다. 다음 표는 최신 출시 버전의 Looker에서 대칭 집계를 지원하는 언어를 보여줍니다.
방언이 대칭 집계를 지원하지 않는 경우 Looker에서 조인을 실행할 때 주의해야 합니다. 일부 조인 유형으로 인해 합계 및 평균과 같은 부정확한 집계가 발생할 수 있습니다. 이 문제 및 해결 방법은 SQL 팬아웃 문제 고객센터 도움말에 자세히 설명되어 있습니다.
조인 자세히 알아보기
LookML의 조인 매개변수에 관한 자세한 내용은 조인 참조 문서를 확인하세요.