join

사용


explore: explore_name {
  join: view_name { ... }
}
계층 구조
join
기본값
없음

수락
기존 뷰의 이름

특별 규칙
  • 이 매개변수는 뷰의 기본 테이블 이름이 아닌 뷰 이름을 허용합니다 (이름이 동일한 경우가 많음).
  • 언어에서 symmetric_aggregates를 지원하지 않는 경우 대부분의 측정 유형이 조인된 뷰에서 제외됩니다.
  • from을 사용하여 동일한 뷰를 두 번 이상 조인할 수 있습니다.

정의

join를 사용하면 Explore 간의 조인 관계를 정의하여 여러 뷰의 데이터를 결합할 수 있습니다. 원하는 Explore에 대해 원하는 만큼 뷰를 조인할 수 있습니다.

각 뷰는 데이터베이스의 테이블 또는 Looker에서 정의한 파생 테이블과 연결됩니다. 마찬가지로 Explore는 뷰와 연결되어 있으므로 일종의 테이블에도 연결되어 있습니다.

Explore와 연결된 테이블은 Looker에서 생성하는 SQL의 FROM 절에 배치됩니다. 조인된 뷰와 연결된 테이블은 Looker에서 생성하는 SQL의 JOIN 절에 배치됩니다.

주요 조인 매개변수

Explore와 뷰 간의 조인 관계 (SQL ON 절)를 정의하려면 join을 다른 매개변수와 함께 사용해야 합니다.

SQL ON 절을 설정하려면 sql_on 또는 foreign_key 매개변수를 사용해야 합니다.

typerelationship 파라미터가 항상 명시적으로 필요한 것은 아니지만 적절한 조인 유형과 관계를 사용하고 있는지 확인해야 합니다. type: left_outerrelationship: many_to_one의 기본값이 사용 사례에 적합한 경우 이러한 매개변수를 제외할 수 있습니다.

이러한 주요 매개변수와 Looker에서 생성하는 SQL과의 관계는 다음과 같이 요약할 수 있습니다.

  • explore 매개변수는 생성된 SQL 쿼리의 FROM 절에 있는 테이블을 결정합니다.
  • join 매개변수는 생성된 SQL 쿼리의 JOIN 절을 결정합니다.
    • type 매개변수는 SQL 조인 유형을 결정합니다.
    • sql_on 매개변수와 foreign_key 매개변수는 생성된 SQL 쿼리의 ON 절을 결정합니다.

sql_on

sql_on을 사용하면 SQL ON 절을 직접 작성하여 조인 관계를 설정할 수 있습니다. foreign_key와 동일한 조인을 실행할 수 있지만 읽고 이해하기가 더 쉽습니다.

자세한 내용은 sql_on 파라미터 문서 페이지를 참조하세요.

foreign_key

foreign_key을 사용하면 조인된 뷰의 기본 키를 사용하여 조인 관계를 설정하고 Explore의 측정기준과 연결할 수 있습니다. 이 패턴은 데이터베이스 설계에서 매우 일반적이며 foreign_key는 이러한 경우에 조인을 표현하는 세련된 방법입니다.

자세한 내용은 foreign_key 파라미터 문서 페이지를 참고하세요.

type

Looker의 대부분의 조인은 이 페이지의 가능한 경우 조인에 비즈니스 로직을 적용하지 마세요 섹션에 설명된 이유로 LEFT JOIN입니다. 따라서 type을 명시적으로 추가하지 않으면 Looker는 LEFT JOIN을 원하는 것으로 가정합니다. 하지만 어떤 이유로 다른 유형의 조인이 필요한 경우 type를 사용하여 조인을 수행할 수 있습니다.

자세한 설명은 type 매개변수 문서 페이지를 참고하세요.

relationship

relationship는 Looker가 생성하는 SQL에 직접적인 영향을 미치지는 않지만 Looker의 적절한 작동에 중요합니다. relationship를 명시적으로 추가하지 않으면 Looker에서 관계를 many-to-one로 해석합니다. 즉, Explore의 여러 행이 조인된 뷰의 한 행을 가질 수 있습니다. 모든 조인이 이러한 유형의 관계를 갖는 것은 아니며 다른 관계를 갖는 조인은 적절하게 선언해야 합니다.

자세한 내용은 relationship 파라미터 문서 페이지를 참고하세요.

예시

조인 관계가 다음과 같은 customer 뷰를 order Explore에 조인합니다.

FROM order LEFT JOIN customer ON order.customer_id = customer.id:

explore: order {
  join: customer {
    foreign_key: customer_id
    relationship: many_to_one # Could be excluded since many_to_one is the default
    type: left_outer          # Could be excluded since left_outer is the default
  }
}

조인 관계가 다음과 같은 address 뷰를 person Explore에 조인합니다.

FROM person LEFT JOIN address ON person.id = address.person_id AND address.type = 'permanent':

explore: person {
  join: address {
    sql_on: ${person.id} = ${address.person_id} AND ${address.type} = 'permanent' ;;
    relationship: one_to_many
    type: left_outer # Could be excluded since left_outer is the default
  }
}

조인 관계가 다음과 같은 member 뷰를 event Explore에 조인합니다.

FROM event INNER JOIN member ON member.id = event.member_id:

explore: event {
  join: member {
    sql_on: ${event.member_id} = ${member.id} ;;
    relationship: many_to_one # Could be excluded since many_to_one is the default
    type: inner
  }
}

일반 과제

join는 기본 테이블 이름이 아닌 뷰 이름을 사용해야 합니다.

join 매개변수는 뷰 이름만 사용하며 해당 뷰와 연결된 테이블 이름은 사용하지 않습니다. 뷰 이름과 테이블 이름이 동일한 경우가 많아 테이블 이름을 사용할 수 있다는 잘못된 결론을 내릴 수 있습니다.

일부 유형의 측정값에는 대칭 집계가 필요함

대칭 집계를 사용하지 않는 경우 대부분의 측정 유형이 조인된 뷰에서 제외됩니다. Looker가 Looker 프로젝트에서 대칭 집계를 지원하려면 데이터베이스 언어에서도 이를 지원해야 합니다. 다음 표에는 최신 출시 버전의 Looker에서 대칭 집계를 지원하는 언어가 나와 있습니다.

언어 지원 여부
Actian Avalanche
Amazon Athena
Amazon Aurora MySQL
Amazon Redshift
Amazon Redshift 2.1+
Amazon Redshift Serverless 2.1+
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+ with Native Driver
Cloudera Impala with Native Driver
DataVirtuality
Databricks
Denodo 7
Denodo 8 & 9
Dremio
Dremio 11+
Exasol
Google BigQuery Legacy SQL
Google BigQuery Standard SQL
Google Cloud PostgreSQL
Google Cloud SQL
Google Spanner
Greenplum
HyperSQL
IBM Netezza
MariaDB
Microsoft Azure PostgreSQL
Microsoft Azure SQL Database
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
SAP HANA 2+
SingleStore
SingleStore 7+
Snowflake
Teradata
Trino
Vector
Vertica

대칭 집계가 없으면 일대일이 아닌 조인 관계에서 집계 함수의 결과가 부정확해질 수 있습니다. Looker 측정값은 집계 함수이므로 조인된 뷰에서 Explore로 가져오는 것은 type: count (COUNT DISTINCT)의 측정값뿐입니다. 일대일 조인 관계가 있는 경우 다음과 같이 relationship 매개변수를 사용하여 다른 측정 유형을 강제로 포함할 수 있습니다.

explore: person {
  join: dna {
    sql_on: ${person.dna_id} = ${dna.id} ;;
    relationship: one_to_one
  }
}

Looker가 이러한 방식으로 작동하는 이유 (대칭형 집계를 지원하지 않는 언어의 경우)는 SQL 팬아웃 문제 커뮤니티 게시물에 자세히 설명되어 있습니다.

알아 두어야 할 사항

from을 사용하여 동일한 테이블을 두 번 이상 조인할 수 있습니다.

단일 테이블에 여러 유형의 항목이 포함된 경우 뷰를 Explore에 두 번 이상 조인할 수 있습니다. 이렇게 하려면 from 매개변수를 사용해야 합니다. order Explore가 있고 person 보기에 두 번 참여해야 한다고 가정해 보겠습니다. 한 번은 고객을 위해, 한 번은 고객 서비스 담당자를 위해 참여해야 합니다. 다음과 같이 할 수 있습니다.

explore: order {
  join: customer {
    from: person
    sql_on: ${order.customer_id} = ${customer.id} ;;
  }
  join: representative {
    from: person
    sql_on: ${order.representative_id} = ${representative.id} ;;
  }
}

가능하면 조인에 비즈니스 로직을 적용하지 마세요.

조인에 대한 표준 Looker 접근 방식은 가능하면 LEFT JOIN을 사용하는 것입니다. 다음과 같은 작업을 하고 있다면 다른 접근 방식을 고려해 보세요.

explore: member_event {
  from: event
  always_join: [member]
  join: member {
    sql_on: ${member_event.member_id} = ${member.id} ;;
    type: inner
  }
}

이 예에서는 알려진 회원과 연결된 이벤트만 살펴보는 탐색 분석을 만들었습니다. 하지만 Looker에서 이 작업을 실행하는 기본 방법은 다음과 같이 LEFT JOIN를 사용하여 이벤트 데이터와 회원 데이터를 함께 가져오는 것입니다.

explore: event {
  join: member {
    sql_on: ${event.member_id} = ${member.id} ;;
  }
}

그런 다음 회원 이벤트만 확인하려면 다음과 같이 yes 또는 no로 설정할 수 있는 측정기준을 만듭니다.

dimension: is_member_event {
  type: yesno
  sql: ${member.id} IS NOT NULL ;;
}

이 방법은 사용자가 원하는 대로 모든 이벤트 또는 회원 이벤트만 볼 수 있는 유연성을 제공하므로 선호됩니다. 조인을 통해 회원 이벤트만 보도록 강제하지 않았습니다.

대칭 집계를 사용하지 않는 경우 팬아웃을 유발하는 조인을 피하세요.

이 섹션은 대칭 집계를 지원하지 않는 데이터베이스 언어에만 적용됩니다. 언어가 대칭 집계를 지원하는지 확인하려면 이 페이지의 일반적인 문제 섹션에서 대칭 집계에 관한 설명을 참고하세요.

데이터베이스 언어가 대칭 집계를 지원하지 않는 경우 팬아웃이 발생하는 조인을 피해야 합니다. 즉, Explore와 뷰 간에 일대다 관계가 있는 조인은 일반적으로 피해야 합니다. 대신 뷰의 데이터를 파생 테이블에서 집계하여 Explore와 일대일 관계를 설정한 다음 해당 파생 테이블을 Explore에 조인합니다.

이 중요한 개념은 커뮤니티 게시물 SQL 팬아웃 문제에 자세히 설명되어 있습니다.