sql_on

사용

explore: view_name_1 {
  join: view_name_2 {
    sql_on: ${view_name_1.id} = ${view_name_2.id} ;;
  }
}
계층 구조
sql_on
기본값
없음

수락
SQL ON

특별 규칙
sql_on, sql_foreign_key, foreign_key은 동일한 join 내에서 동시에 사용할 수 없습니다.

정의

sql_on는 사용자가 제공하는 SQL ON 절을 기반으로 뷰와 Explore 간의 조인 관계를 설정합니다.

LookML의 경우 sql_on의 조건 순서는 중요하지 않습니다. 따라서 sql_on: ${order.user_id} = ${user.id} ;;sql_on: ${user.id} = ${order.user_id} ;;은 동일합니다. 데이터베이스의 SQL 언어와 관련이 없는 경우 조건을 어떤 순서로든 배치할 수 있습니다.

sql_on를 사용하는 경우 뷰를 Explore에 직접 조인하거나 Explore에 이미 조인된 두 번째 뷰를 통해 조인할 수 있습니다.

뷰가 Explore에 직접 조인되는 첫 번째 사례의 예는 다음과 같습니다.

explore: order {
  join: customer {
    sql_on: ${order.customer_id} = ${customer.id} ;;
  }
}

Looker가 이 LookML에서 생성하는 SQL은 다음과 같습니다.

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

두 번째 경우에는 이미 해당 Explore에 조인된 중간 뷰를 통해 뷰가 Explore에 조인됩니다. 예를 들면 다음과 같습니다.

explore: order_items {
  join: order {
    sql_on: ${order_items.order_id} = ${order.id} ;;
  }
  join: customer {
    sql_on: ${order.customer_id} = ${customer.id} ;;
  }
}

여기에서는 customerorder_items에 직접 연결할 수 없습니다. 대신 order를 통해 결합해야 합니다. Looker가 이 LookML에서 생성하는 SQL은 다음과 같습니다.

SELECT    ...
FROM      order_items
LEFT JOIN order
ON        order_items.order_id = order.id
LEFT JOIN customer
ON        order.customer_id = customer.id

이 기능을 올바르게 작동시키려면 필드 참조에서 올바른 뷰 이름을 사용해야 합니다. customerorder의 필드에 조인해야 하므로 ${order.customer_id}를 참조합니다.

일부 이전 모델에서는 view_name.native_column_name 구문으로 참조되는 필드가 표시될 수 있습니다. 이 방법도 여전히 작동하지만 대신 ${view_name.looker_dimension_name} 구문을 사용하면 required_joins 매개변수가 필요하지 않다는 중요한 이점이 있습니다. 이 개념은 이 페이지의 ${view_name.looker_dimension_name} 구문을 사용할 수 없는 경우 required_joins 사용 섹션에 자세히 설명되어 있습니다.

조건부 조인

사용자 입력이 sql_on에서 사용되도록 허용할 수도 있습니다. 이 작업을 수행하려는 이유는 다양하지만 조인 절의 조건 커뮤니티 게시물에 설명된 대로 MPP 데이터베이스 (예: Redshift)에서 쿼리 속도를 최적화하는 것이 주요 사용 사례입니다.

조인 조건에 사용자 입력을 추가하려면 먼저 입력에 대한 필터를 만들어야 합니다. 이러한 유형의 필터는 템플릿 필터 페이지에 자세히 설명되어 있습니다. 기본 형식은 다음과 같습니다.

view: view_name {
  filter: filter_name {
    type: number | datetime | date | string
  }
}

사용자 입력을 수집하는 필터를 추가한 후에는 다음과 같이 sql_on 매개변수에서 사용합니다.

{% condition view_name.filter_name %} view_name.dimension_name {% endcondition %}

예를 들면 다음과 같습니다.

explore: order {
  join: customer {
    sql_on:
      ${order.customer_id} = ${customer.id} AND
      {% condition customer.creation_date_filter %} customer.created_at {% endcondition %} ;;
  }
}

이는 customer.created_atcustomer.creation_date_filter의 값과 같게 설정한다는 의미로 해석됩니다.

_in_query, _is_selected, _is_filtered Liquid 변수 사용

_in_query, _is_selected, _is_filtered Liquid 변수sql_on 매개변수와 함께 사용할 때 유용합니다. 사용자가 쿼리에 대해 선택한 필드를 기반으로 조인 관계를 수정할 수 있습니다. 예를 들면 다음과 같습니다.

explore: dates {
  join: dynamic_order_counts {
    sql_on:
      ${dynamic_order_counts.period} =
      {% if dates.reporting_date._in_query %}
        ${dates.date_string}
      {% elsif dates.reporting_week._in_query %}
        ${dates.week_string}
      {% else %}
        ${dates.month_string}
      {% endif %} ;;
  }
}

예시

ordercustomer_id 측정기준을 customerid 측정기준과 일치시켜 customer라는 뷰를 order라는 Explore에 조인합니다.

explore: order {
  join: customer {
    sql_on: ${order.customer_id} = ${customer.id} ;;
  }
}

order 뷰를 통해 customer 뷰를 order_items Explore에 조인합니다. ordercustomer_id 측정기준을 customerid 측정기준과 일치시킵니다. order_itemsorder_id 측정기준을 orderid 측정기준과 일치시킵니다. 다음과 같이 지정됩니다.

explore: order_items {
  join: order {
    sql_on: ${order_items.order_id} = ${order.id} ;;
  }
  join: customer {
    sql_on: ${order.customer_id} = ${customer.id} ;;
  }
}

orderinventory_items이라는 뷰를 order_items라는 Explore에 조인합니다. order_itemsinventory_id 측정기준을 inventory_itemid 측정기준과 일치시킵니다. order_itemsorder_id 측정기준을 orderid 측정기준과 일치시킵니다. 다음과 같이 지정됩니다.

explore: order_items {
  join: order {
    sql_on: ${order_items.order_id} = ${order.id} ;;
  }
  join: inventory_item {
    sql_on: ${order_items.inventory_id} = ${inventory_item.id} ;;
  }
}

알아 두어야 할 사항

${view_name.looker_dimension_name} 구문을 사용할 수 없는 경우 required_joins 사용

${view_name.looker_dimension_name} 구문을 사용하여 sql_on의 필드를 참조할 때는 required_joins를 사용하는 것에 대해 걱정하지 않아도 됩니다.

하지만 일부 이전 모델에서는 여전히 view_name.native_column_name 구문을 사용합니다. 맞춤 SQL을 적용하려는 경우와 같이 ${view_name.looker_dimension_name} 구문을 사용할 수 없는 경우도 있습니다.

이러한 상황에서는 required_joins를 사용해야 할 수 있습니다. 자세한 내용은 required_joins 파라미터 문서 페이지를 참고하세요.