SQL 통합 및 LookML 객체 참조

강력한 LookML을 작성하려면 기존 측정기준, 측정값, 뷰 또는 파생된 테이블이 현재 범위에 속하지 않더라도 참조할 수 있어야 합니다. 또한 기본 테이블의 열을 참조하고 데이터베이스 언어를 사용하여 해당 값을 조작해야 합니다.

대체 연산자 ($)

대체 연산자 $를 사용하면 LookML 코드를 재사용하고 모듈화할 수 있으므로 다른 뷰와 파생 테이블, SQL 테이블의 열 또는 LookML 측정기준 및 측정값을 참조할 수 있습니다. 여기에는 2가지 이유가 있습니다. 첫째, 이미 대단히 까다로운 측정기준이나 측정값을 확인했으며 모든 복잡도를 다시 작성할 필요는 없기 때문입니다. 둘째, 측정기준 또는 측정값을 변경하면 해당 변경사항이 해당 항목에 의존하는 다른 모든 항목에 전파될 수 있습니다.

대체 연산자를 사용할 수 있는 몇 가지 방법이 있습니다.

${TABLE}.column_name는 작업 중인 뷰에 연결된 테이블의 열을 참조합니다. 예를 들면 다음과 같습니다.

dimension: customer_id {
  type: number
  sql: ${TABLE}.customer_id ;;
}

${field_name}는 작업 중인 보기의 측정기준 또는 측정값을 참조합니다. 예를 들면 다음과 같습니다.

measure: total_population {
  type: sum
  sql: ${population} ;;
}

${view_name.field_name}는 다른 뷰의 측정기준 또는 측정값을 참조합니다. 예를 들면 다음과 같습니다.

dimension: lifetime_orders {
  type: number
  sql: ${user_order_facts.lifetime_orders} ;;
}

${view_name.SQL_TABLE_NAME}는 다른 뷰 또는 파생 테이블을 참조합니다. 이 참조의 SQL_TABLE_NAME는 리터럴 문자열이므로 다른 것으로 바꿀 필요가 없습니다. 예를 들면 다음과 같습니다.

explore: trips {
  view_label: "Long Trips"
  # This will ensure that we only see trips that are longer than average!
  sql_always_where: ${trips.trip_duration}>=(SELECT tripduration FROM ${average_trip_duration.SQL_TABLE_NAME});;
}

${view_name.SQL_TABLE_NAME}datagroups와 함께 사용되는 sql_trigger 매개변수와 함께 작동하지 않습니다.

범위 지정 및 이름 지정

탐색 분석, 보기, 필드 및 세트의 이름을 지정할 수 있습니다. 이러한 Looker 식별자는 따옴표 없이 작성됩니다.

LookML 필드 및 세트에는 전체 이름짧은 이름이 있습니다.

  • 전체 이름은 <view>.<field-name | set-name> 형식입니다. 왼쪽은 필드 또는 집합을 포함하는 뷰인 범위를 나타냅니다. 오른쪽에는 특정 필드 또는 세트 이름이 지정되어 있습니다.
  • 닉네임은 마침표 없이 <field-name | set-name> 형식을 사용합니다. Looker는 닉네임에 전체 범위를 사용합니다.

다음은 다양한 이름과 형식을 보여주는 예입니다. 이는 실현 가능한 필드 그룹이지만 다양한 범위 지정 표현식을 보여주는 것으로 보입니다.

view: orders {                   # "orders" becomes the containing scope
  measure: count {               # short name, equivalent to orders.count
    type: count
  }
  dimension: customer_id {       # short name, equivalent to orders.customer_id
    type: number
    sql: ${TABLE}.customer_id ;;
  }
  dimension: customer_address {  # short name, equivalent to orders.customer_address
    sql: ${customer.address} ;;  # full name, references a field defined in the "customer" view
  }
  set: drill_fields {            # short name, equivalent to orders.drill_fields
    fields: [
      count,                     # short name, equivalent to orders.count
      customer.id                # full name, references a field defined in the "customer" view
    ]
  }
}

위의 dimension: customer_address 선언에서 SQL 블록의 기본 뷰(customer)가 주변을 둘러싼 뷰 범위(orders)와 다릅니다. 두 뷰 간에 필드를 비교해야 하는 경우 유용할 수 있습니다.

뷰 (뷰 '뷰')는 다른 뷰로 정의된 필드 (뷰 B라고 함)를 지칭할 때 유의해야 할 몇 가지 사항이 있습니다.

  1. 뷰 B 파일은 include 매개변수를 사용하여 뷰 A와 동일한 모델에 포함되어야 합니다.
  2. 하나 이상의 탐색 분석에서 A를 보려면 보기 B를 조인해야 합니다. 조인에 대한 자세한 내용은 LookML에서 조인 작업 페이지를 참조하세요.

SQL 언어

Looker는 MySQL, Postgres, Redshift, BigQuery 등 다양한 데이터베이스 유형을 지원합니다. 각 데이터베이스는 SQL 언어라고 하는 함수 이름이 서로 약간 다른 기능 집합을 지원합니다.

LookML은 모든 SQL 언어를 지원하도록 설계되었으며 LookML은 특정 언어보다 다른 언어를 사용하는 것을 선호하지 않습니다. 그러나 특정 LookML 매개변수에 SQL 코드 표현식 (SQL 블록이라고 함)을 포함해야 합니다. 이러한 매개변수를 사용하면 Looker에서 SQL 표현식을 데이터베이스에 직접 전달하므로 데이터베이스와 일치하는 SQL 언어를 사용해야 합니다. 예를 들어 SQL 함수를 사용하는 경우 데이터베이스에서 지원하는 함수여야 합니다.

SQL 블록

일부 LookML 매개변수는 원시 SQL 표현식을 제공해야 Looker가 데이터베이스에서 데이터를 가져오는 방법을 이해할 수 있습니다.

sql_으로 시작하는 LookML 매개변수에는 SQL 형식의 표현식이 필요합니다. 예: sql_always_where, sql_on, sql_table_name. SQL 블록의 가장 일반적인 LookML 매개변수는 sql입니다. 이는 측정기준 및 측정 필드 정의에서 측정기준 또는 측정을 정의하는 SQL 표현식을 지정하는 데 사용됩니다.

SQL 블록에 지정하는 코드는 단일 필드 이름처럼 간단하거나 상관관계가 있는 하위 선택 항목만큼 복잡할 수 있습니다. 콘텐츠는 매우 복잡할 수 있으며 원시 SQL로 커스텀 쿼리 로직을 표현하기 위해 필요한 거의 모든 것을 수용할 수 있습니다. SQL 블록에서 사용하는 코드는 데이터베이스에서 사용하는 SQL 언어와 일치해야 합니다.

측정기준 및 측정값에 대한 SQL 블록 예시

다음은 측정기준과 측정항목의 SQL 블록 예시입니다. LookML 대체 연산자 ($)는 이러한 sql 선언을 SQL과 달리 사기성으로 표시할 수 있습니다. 그러나 대체가 발생한 후에 발생하는 문자열은 순수 SQL이며 Looker에서 쿼리의 SELECT 절에 삽입합니다.

dimension: id {
  primary_key: yes
  sql: ${TABLE}.id ;;   # Specify the primary key, id
}
measure: average_cost {
  type: average
  value_format: "0.00"
  sql: ${order_items.cost} ;;   # Specify the field that you want to average
}
dimension: name {
  sql: CONCAT(${first_name}, ' ', ${last_name}) ;;
}
dimension: days_in_inventory {
  type: int
  sql: DATEDIFF(${sold_date}, ${created_date}) ;;
}

위의 마지막 두 차원에 나와 있는 것처럼 SQL 블록은 기본 데이터베이스에서 지원하는 함수 (예: MySQL 함수 CONCATDATEDIFF)를 사용할 수 있습니다.

상관된 하위 선택이 포함된 SQL 블록 예시

상관된 하위 선택을 포함하여 모든 SQL 문을 필드의 SQL 블록에 배치할 수 있습니다. 예를 들면 다음과 같습니다.

view: customers {
  dimension: id {
    primary_key: yes
    sql: ${TABLE}.id ;;
  }
  dimension: first_order_id {
    sql: (SELECT MIN(id) FROM orders o WHERE o.customer_id=customers.id) ;;
         # correlated subselect to derive the value for "first_order_id"
  }
}

파생된 테이블의 SQL 블록 예

파생 테이블은 SQL 블록을 사용하여 테이블을 파생하는 쿼리를 지정합니다. 예를 들면 다음과 같습니다.

view: user_order_facts {
  derived_table: {
    sql:            # Get the number of orders for each user
      SELECT
        user_id
        , COUNT(&#42;) as lifetime_orders
      FROM orders
      GROUP BY 1 ;;
  }
  # later, dimension declarations reference the derived column(s)

  dimension: lifetime_orders {
    type: number
  }
}

LookML 필드 유형 참조

다른 필드 내에서 기존 LookML 필드를 참조할 때 이중 콜론 (::)과 원하는 유형을 사용하여 Looker에 참조된 필드를 특정 데이터 유형으로 처리하라고 지시할 수 있습니다. 예를 들어 다른 필드 내에서 orders.created_date 측정기준을 참조하는 경우 ${orders.created_date::date} 필드를 사용하면 created_date 필드가 문자열로 변환되지 않고 Looker에서 생성되는 SQL의 날짜 필드로 처리되도록 할 수 있습니다.

참조에 사용할 수 있는 데이터 유형은 참조하는 원본 필드의 데이터 유형에 따라 다릅니다. 예를 들어 문자열 필드를 참조하는 경우 지정할 수 있는 유일한 데이터 유형은 ::string입니다. 다음은 각 필드 유형에 사용할 수 있는 허용된 필드 유형 참조의 전체 목록입니다.

  • 문자열 필드 참조에 ::string를 사용할 수 있습니다.
  • 숫자 필드 참조에 ::string::number를 사용할 수 있습니다.
  • 날짜 또는 시간 참조에 대해 ::string, ::date, ::datetime를 사용할 수 있습니다.
    ::string::date를 사용하는 참조는 쿼리 시간대에서 데이터를 반환하고 ::datetime를 사용하는 참조는 데이터베이스 시간대에서 데이터를 반환합니다.
  • yesno 필드 참조에 ::string, ::number, ::boolean를 사용할 수 있습니다.
    부울 데이터 유형을 지원하지 않는 데이터베이스 언어에서는 ::boolean 유형을 사용하는 필드 참조를 사용할 수 없습니다.
  • 위치 필드 참조에 ::latitude::longitude를 사용할 수 있습니다.

날짜 필드에 LookML 필드 유형 참조 사용

예를 들어 enrollment_month 측정기준과 graduation_month 측정기준이 있고 둘 다 type: time의 측정기준 그룹 내에서 생성되었다고 가정해 보겠습니다. 이 예에서 enrollment_month 측정기준은 다음과 같은 type: time의 측정기준 그룹에 의해 생성됩니다.


dimension_group: enrollment {
  type: time
  timeframes: [time, date, week, month, year, raw]
  sql: ${TABLE}.enrollment_date ;;
}

마찬가지로 graduation_month 측정기준은 다음 type: time 측정기준 그룹에 의해 생성됩니다.


dimension_group: graduation {
  type: time
  timeframes: [time, date, week, month, year, raw]
  sql: ${TABLE}.graduation_date ;;
}

enrollment_monthgraduation_month 측정기준을 사용하면 type: duration 측정기준 그룹을 만들어 학생 등록 및 졸업 간 경과 개월 또는 연수를 계산할 수 있습니다. 그러나 일부 날짜 필드는 Looker에서 생성되는 SQL의 문자열로 변환되기 때문에 enrollment_monthgraduation_month 측정기준을 sql_startsql_end 값으로 설정하면 오류가 발생할 수 있습니다.

이러한 시간 필드가 문자열로 변환되어 발생하는 오류를 피하려면 sql_startsql_end 매개변수의 enrollmentgraduation 측정기준 그룹에서 raw 기간을 참조하는 type: duration 측정기준 그룹을 만듭니다.


dimension_group: enrolled {
  type: duration
  intervals: [month, year]
  sql_start: ${enrollment_raw} ;;
  sql_end: ${graduation_raw} ;;
}

탐색 UI에서 등록된 기간이라는 측정기준 그룹이 생성되며, 이 측정기준 그룹은 등록된 월등록 연도로 구성됩니다.

type: duration의 측정기준 그룹에서 raw 기간을 사용하는 더 간단한 대안은 sql_startsql_end 매개변수에서 참조되는 필드에 ::date 또는 ::datetime 참조 유형을 지정하는 것입니다.


dimension_group: enrolled {
  type: duration
  intervals: [month, year]
  sql_start: ${enrollment_month::date} ;;
  sql_end: ${graduation_month::date} ;;
}

이 예에서 LookML은 등록된 기간 측정기준 그룹도 만들지만 ::date 참조를 사용하면 raw 기간을 사용하거나 SQL을 사용하여 문자열로 변환하지 않고도 enrollment_monthgraduation_month 측정기준을 사용할 수 있습니다.

LookML 필드 유형 참조를 사용하여 type: duration의 맞춤 측정기준 그룹을 만드는 방법에 대한 추가 예는 dimension_group 매개변수 문서 페이지를 참고하세요.

이 구문은 Looker 6.8부터 참조할 수 없는 type: list 측정값에는 사용할 수 없습니다.

LookML 상수

constant 매개변수를 사용하면 LookML 프로젝트 전체에서 사용할 수 있는 상수를 지정할 수 있습니다. LookML 상수를 사용하면 값을 한 번 정의하고 문자열이 허용되는 프로젝트의 모든 위치에서 참조할 수 있으므로 LookML 코드에서 반복이 줄어듭니다.

상수는 프로젝트 매니페스트 파일 내에서 선언되어야 하며, 상수 값은 문자열이어야 합니다. 예를 들어 다음과 같이 값이 "Okayama"인 상수 city를 정의할 수 있습니다.

constant: city {
  value: "Okayama"
}

그런 다음 @{city} 문법을 사용하여 프로젝트 전체에서 city 상수를 참조할 수 있습니다. 예를 들어 users 탐색에서 label 매개변수와 함께 city 상수를 사용할 수 있습니다.


explore: users {
  label: "@{city} Users"
}

그러면 Looker가 기본 사용자가 아닌 탐색 메뉴와 탐색 제목에 오카야마 사용자가 표시됩니다.

LookML 상수를 사용하여 재사용 가능한 코드를 작성하는 방법에 대한 자세한 내용과 예는 constant 매개변수 문서 페이지를 참조하세요.