조인

용도

Explore: Explore_name {
join: view_name { ... }
}
계층 구조
join
기본값
없음

결제 가능
기존 뷰의 이름

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

정의

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

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

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

주 조인 매개변수

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

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

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

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

sql_on

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

자세한 내용은 sql_on 매개변수 문서 페이지를 참고하세요.

foreign_key

foreign_key에서는 조인된 뷰의 기본 키를 사용하고 탐색에서 측정기준과 연결하는 조인 관계를 설정할 수 있습니다. 이 패턴은 데이터베이스 설계에서 매우 일반적이며 이러한 경우에 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 매개변수 문서 페이지를 참조하세요.

Examples

이름이 customer인 뷰를 조인 관계인 order에 연결합니다.

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에 연결합니다.

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에 연결합니다.

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에서 대칭 집계를 지원하는 언어를 보여줍니다.

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

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

Looker가 이런 방식으로 작동하는 이유 (대칭 집계를 지원하지 않는 방언의 경우)는 SQL 팬아웃 문제 고객센터 도움말에 자세히 설명되어 있습니다.

알아두어야 할 사항

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

단일 표에 다른 유형의 항목이 포함된 경우 뷰를 탐색에 두 번 이상 조인할 수 있습니다. 이렇게 하려면 from 매개변수를 사용해야 합니다. order 탐색 분석이 있고 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 ;;
}

-

이 방법을 사용하면 사용자가 모든 이벤트를 보거나 원하는 대로 멤버 이벤트만 볼 수 있는 유연성을 얻을 수 있으므로 더 좋습니다. 사용자가 조인을 통해 멤버 이벤트만 보도록 강제하지 않았습니다.

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

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

데이터베이스 언어에서 대칭 집계를 지원하지 않는 경우에는 팬아웃을 유발하는 조인을 피해야 합니다. 즉, 탐색과 뷰 간에 일대다 관계가 있는 조인은 일반적으로 사용하지 않아야 합니다. 대신 탐색에서 일대일 관계를 설정하기 위해 파생된 표에서 보기의 데이터를 집계한 다음, 이 파생된 테이블을 탐색에 조인합니다.

이 중요한 개념은 SQL 팬아웃 문제 고객센터 도움말에 자세히 설명되어 있습니다.