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 절을 설정하려면 either sql_on or 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 측정은 집계 함수이므로 type: count (as COUNT DISTINCT) 측정만 조인된 뷰에서 Explore로 가져옵니다. 일대일 조인 관계가 있는 경우 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
  }
}

이 예에서는 알려진 회원과 연결된 이벤트만 살펴보는 Explore를 만들었습니다. 그러나 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 팬아웃 문제에 자세히 설명되어 있습니다.