LookML에서 조인 다루기

조인을 사용하면 서로 다른 를 연결하여 동시에 둘 이상의 뷰에서 데이터를 탐색하고 데이터의 서로 다른 부분이 서로 어떻게 관련되는지 확인할 수 있습니다.

예를 들어 데이터베이스에 order_items, orders, users 테이블이 포함될 수 있습니다. 조인을 사용하여 모든 테이블의 데이터를 동시에 탐색할 수 있습니다. 이 페이지에서는 특정 조인 파라미터와 조인 패턴을 포함한 LookML의 조인에 대해 설명합니다.

탐색으로 조인 시작

조인은 탐색 간의 관계를 구축하기 위해모델 파일에 정의됩니다. 조인은 하나 또는 여러 개의 뷰를 단일 탐색에 직접 또는 다른 조인된 뷰를 통해 연결합니다.

order_itemsorders라는 두 가지 데이터베이스 테이블을 가정해 보겠습니다. 두 테이블의 뷰를 생성한 후 모델 파일의 explore 파라미터 아래에서 하나 이상을 선언합니다.

explore: order_items { ... }

order_items 탐색에서 쿼리를 실행하면 order_items가 생성된 SQL의 FROM 절에 나타납니다.

SELECT ...
FROM order_items

order_items 탐색에 추가 정보를 조인할 수 있습니다. 예를 들어 다음 샘플 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 필드 선택 도구에서 ordersorder_items의 필드를 모두 볼 수 있습니다.

주문 항목 Explore에는 주문 항목 뷰의 필드와 조인된 주문 뷰의 필드가 포함됩니다.

둘째, LookML은 ordersorder_items를 함께 조인하는 방법을 설명합니다. 이 LookML은 다음 SQL로 변환됩니다.

SELECT ...
FROM order_items
LEFT JOIN orders
ON order_items.order_id = orders.id

이러한 LookML 파라미터는 다음 섹션에서 더 자세히 설명합니다.

조인 파라미터

join, type, relationship, sql_on의 네 가지 기본 파라미터가 조인에 사용됩니다.

1단계: 탐색 시작

먼저 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, crosstype 파라미터 값에 해당합니다.

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_itemsorders의 필드가 모두 표시됩니다.

Explore에서 LookML 변경사항을 테스트하는 방법에 대한 자세한 내용은 LookML 수정 및 검증을 참조하세요.

다른 뷰를 통해 참여하기

다른 뷰를 통해 뷰를 탐색에 조인할 수 있습니다. 앞의 예시에서는 order_id 필드를 통해 ordersorder_items에 조인했습니다. 공통 필드를 공유하지 않더라도 users라는 뷰의 데이터를 order_items 탐색에 조인해야 할 수 있습니다. 이 작업은 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} ;;
  }
}

뷰에 두 번 이상 참여

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 뷰는 조인에서 별칭 이름 buyerssellers로 참조되어야 합니다.

조인에서 필드 제한

fields 파라미터를 사용하면 조인에서 탐색으로 가져올 필드를 지정할 수 있습니다. 기본적으로 뷰의 모든 필드는 조인될 때 가져옵니다. 하지만 필드의 하위 집합만 가져오려고 할 수도 있습니다.

예를 들어 ordersorder_items에 조인된 경우 조인을 통해 shippingtax 필드만 가져올 수 있습니다.

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]
}

ordersorder_items에 조인할 때 다음 세 가지 필드만 가져오도록 선택할 수 있습니다.

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의 조인 파라미터에 대한 자세한 내용은 조인 참조 문서를 확인하세요.