조인을 사용하면 여러 뷰를 연결할 수 있으므로 동시에 뷰 2개 이상에서 데이터를 탐색하고 데이터의 다른 부분이 서로 어떻게 연관되어 있는지 확인할 수 있습니다.
예를 들어 데이터베이스에 order_items
, orders
, users
테이블이 포함될 수 있습니다. 조인을 사용하여 모든 테이블의 데이터를 동시에 탐색할 수 있습니다. 이 페이지에서는 특정 조인 파라미터와 조인 패턴을 포함한 LookML의 조인에 대해 설명합니다.
탐색으로 조인 시작
조인은 탐색 및 뷰 간의 관계를 구축하기 위해모델 파일에 정의됩니다. 조인은 하나 또는 여러 개의 뷰를 단일 탐색에 직접 또는 다른 조인된 뷰를 통해 연결합니다.
데이터베이스 테이블 2개(order_items
및 orders
)가 있다고 가정해 보겠습니다. 두 테이블의 뷰를 생성한 후 모델 파일의 explore
파라미터 아래에서 하나 이상을 선언합니다.
explore: order_items { ... }
order_items
Explore에서 쿼리를 실행하면 order_items
가 생성된 SQL의 FROM
절에 표시됩니다.
SELECT ...
FROM order_items
추가 정보를 order_items
Explore에 조인할 수 있습니다. 예를 들어 다음 샘플 LookML을 사용하여 orders
뷰를 order_items
Explore에 조인할 수 있습니다.
explore: order_items {
join: orders {
type: left_outer
relationship: many_to_one
sql_on: ${order_items.order_id} = ${orders.id} ;;
}
}
앞서 살펴본 LookML에서 두 가지 작업을 실행합니다. 먼저 Explore 필드 선택 도구에서 orders
및 order_items
의 필드를 모두 확인할 수 있습니다.
둘째, LookML에서는 orders
및 order_items
를 함께 조인하는 방법을 설명합니다. 이 LookML은 다음 SQL로 변환됩니다.
SELECT ...
FROM order_items
LEFT JOIN orders
ON order_items.order_id = orders.id
이러한 LookML 파라미터는 다음 섹션에서 더 자세히 설명합니다.
조인 매개변수
join
, type
, relationship
, sql_on
의 네 가지 기본 파라미터가 조인에 사용됩니다.
1단계: Explore 시작
먼저 order_items
탐색을 만듭니다.
explore: order_items { ... }
2단계: join
테이블을 조인하려면 먼저 뷰에서 테이블을 선언해야 합니다. 이 예시에서는 orders
가 모델의 기존 뷰라고 가정합니다.
그런 다음 join
파라미터를 사용하여 orders
뷰를 order_items
Explore에 조인하도록 선언합니다.
explore: order_items {
join: orders { ... }
}
3단계: 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
Explore 및 orders
뷰 간의 조인 관계를 정의합니다. Looker에서 정확한 추정치를 계산하기 위해 조인의 을 제대로 선언하는 것이 중요합니다. 관계는 order_items
Explore에서 orders
뷰로 정의됩니다. 가능한 옵션은 one_to_one
, many_to_one
, one_to_many
, many_to_many
입니다.
이 예시에서는 주문 하나에 주문 항목이 여러 개 있을 수 있습니다. order_items
Explore 및 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
order_items
테이블과 orders
테이블을 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 Explore로 이동하여 이 조인이 예상대로 작동하는지 테스트합니다. order_items
및 orders
필드 모두 표시되어야 합니다.
Explore에서 LookML 변경사항을 테스트하는 방법에 대한 자세한 내용은 Explore에서 필드 테스트를 참조하세요.
다른 뷰를 통해 참여
다른 뷰를 통해 뷰를 탐색에 조인할 수 있습니다. 조인 매개변수 예시에서는 order_id
필드를 통해 orders
를 order_items
에 조인했습니다. 공통 필드를 공유하지 않더라도 users
뷰의 데이터를 order_items
Explore에 조인해야 할 수 있습니다. orders
뷰를 통해 조인하면 됩니다.
users
뷰를 orders
뷰에 조인하려면 order_items
Explore 대신에 sql_on
파라미터 또는 foreign_key
파라미터를 사용하세요. 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} ;;
}
}
2회 이상 뷰에 참여
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
로 조인됩니다.
참고: 이제 조인에서 별칭이 지정된 buyers
및 sellers
라는 이름으로 users
뷰를 참조해야 합니다.
조인에서 필드 제한
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
에 조인할 때 다음 필드 3개만 가져올 수 있습니다.
explore: order_items {
join: orders {
type: left_outer
relationship: many_to_one
sql_on: ${order_items.order_id} = ${orders.id} ;;
fields: [orders_set*]
}
}
대칭 집계
Looker는 '대칭 집계'라는 기능을 사용하여 집계(예: 합계 및 평균)를 올바르게 계산합니다. 조인이 팬아웃을 일으키는 경우에도 올바르게 계산합니다. 대칭 집계에 대한 자세한 내용은 대칭 집계 이해를 참조하세요. 대칭형 집계에서 해결하는 팬아웃 문제는 SQL 팬아웃 문제 커뮤니티 게시물에 설명되어 있습니다.
기본 키 필요
조인을 통해 측정(집계)을 수행하려면 조인과 관련된 모든 뷰에서 기본 키를 정의해야 합니다.
이렇게 하려면 각 뷰의 기본 키 필드 정의에 primary_key
파라미터를 추가합니다.
dimension: id {
type: number
primary_key: yes
}
지원되는 SQL 언어
Looker가 Looker 프로젝트에서 대칭 집계를 지원하려면 데이터베이스 언어에서도 이를 지원해야 합니다. 다음 표에는 최신 출시 버전의 Looker에서 대칭 집계를 지원하는 언어가 나와 있습니다.
언어 | 지원 여부 |
---|---|
Actian Avalanche | 예 |
Amazon Athena | 예 |
Amazon Aurora MySQL | 예 |
Amazon Redshift | 예 |
Apache Druid | 아니요 |
Apache Druid 0.13 이상 | 아니요 |
Apache Druid 0.18 이상 | 아니요 |
Apache Hive 2.3 이상 | 아니요 |
Apache Hive 3.1.2 이상 | 아니요 |
Apache Spark 3 이상 | 예 |
ClickHouse | 아니요 |
Cloudera Impala 3.1 이상 | 예 |
네이티브 드라이버를 사용하는 Cloudera Impala 3.1 이상 | 예 |
네이티브 드라이버를 사용하는 Cloudera Impala | 아니요 |
DataVirtuality | 예 |
Databricks | 예 |
Denodo 7 | 예 |
Denodo 8 | 예 |
Dremio | 아니요 |
Dremio 11 이상 | 예 |
Exasol | 예 |
Firebolt | 예 |
Google BigQuery Legacy SQL | 예 |
Google BigQuery 표준 SQL | 예 |
Google Cloud PostgreSQL | 예 |
Google Cloud SQL | 예 |
Google Spanner | 예 |
Greenplum | 예 |
HyperSQL | 아니요 |
IBM Netezza | 예 |
MariaDB | 예 |
Microsoft Azure PostgreSQL | 예 |
Microsoft Azure SQL 데이터베이스 | 예 |
Microsoft Azure Synapse Analytics | 예 |
Microsoft SQL Server 2008 이상 | 예 |
Microsoft SQL Server 2012 이상 | 예 |
Microsoft SQL Server 2016 | 예 |
Microsoft SQL Server 2017 이상 | 예 |
MongoBI | 아니요 |
MySQL | 예 |
MySQL 8.0.12 이상 | 예 |
Oracle | 예 |
Oracle ADWC | 예 |
PostgreSQL 9.5 이상 | 예 |
PostgreSQL pre-9.5 | 예 |
PrestoDB | 예 |
PrestoSQL | 예 |
SAP HANA 2 이상 | 예 |
SingleStore | 예 |
SingleStore 7 이상 | 예 |
Snowflake | 예 |
Teradata | 예 |
Trino | 예 |
벡터 | 예 |
Vertica | 예 |
언어에서 대칭 집계를 지원하지 않는 경우 Looker에서 조인을 실행할 때 주의해야 합니다. 일부 조인 유형으로 인해 합계 및 평균과 같은 집계가 부정확해질 수 있기 때문입니다. 이 문제와 해결 방법은 SQL 팬아웃 문제 커뮤니티 게시물에 자세히 설명되어 있습니다.
조인에 대해 자세히 알아보기
LookML의 조인 파라미터에 대한 자세한 내용은 조인 참조 문서를 확인하세요.