LookML이란 무엇인가요?

LookML은 SQL 데이터베이스의 측정기준, 집계, 계산, 데이터 관계를 설명하는 언어입니다. Looker는 LookML로 작성한 모델을 사용해 특정 데이터베이스에 SQL 쿼리를 작성합니다.

LookML 프로젝트

LookML 프로젝트는 일반적으로 Git 저장소를 통해 함께 관리되는 모델, 뷰, 대시보드 파일의 모음입니다. 모델 파일에는 사용할 테이블과 이러한 테이블을 조인하는 방법에 대한 정보가 포함되어 있습니다. 뷰 파일에는 각 테이블에 대한 정보를 계산하는 방법 (조인에 따라 허용되는 경우 여러 테이블에서)에 대한 정보가 포함되어 있습니다.

LookML은 구조와 콘텐츠를 구분하므로 쿼리 구조 (테이블 조인 방식)는 쿼리 콘텐츠 (액세스할 열, 파생 필드, 계산할 집계 함수, 적용할 필터링 표현식)와는 별개입니다.

Looker에서 생성된 SQL 쿼리

데이터 분석가의 경우 LookML은 DRY 스타일을 촉진합니다. 즉, SQL 표현식을 한곳에 작성하고 Looker에서 코드를 반복적으로 사용하여 임시 SQL 쿼리를 생성합니다. 비즈니스 사용자에게 SQL 구조의 복잡성이 아닌 필요한 콘텐츠에만 집중하여 Looker에서 복잡한 쿼리를 빌드할 수 있는 기능이 최종 사용자에게 제공됩니다.

다음 그림은 주문 테이블, 제품, 사용자 등 여러 테이블의 값을 조인하는 Looker에서 빌드된 쿼리를 보여줍니다.

위 그림에서 최종 사용자는 조인 또는 필터링에 대한 SQL 표현식을 이해할 필요가 없습니다.

데이터 구조를 설명하는 종속 항목 언어

LookML은 C 또는 Ruby와 같은 명령적 언어와 달리 make와 같은 종속 항목 언어입니다. LookML은 데이터 모델링을 위해 사전 정의된 데이터 유형과 구문을 제공합니다. LookML 구문의 구조는 명확하고 알아보기 쉽습니다. (프로그래밍 언어에 대한 사전 경험이 없어도 됩니다. 알아야 할 모든 내용은 여기에서 설명합니다.) LookML은 특정 SQL 언어와는 별개이며 SQL 구현을 지원하기 위해 SQL 표현식을 캡슐화합니다.

코드 샘플

아래 예시는 모델 파일과 2개의 뷰 파일이 있는 전자상거래 매장의 최소 LookML 프로젝트를 보여줍니다.

######################################
# FILE: ecommercestore.model.lkml    #
# Define the explores and join logic #
######################################
connection: order_database
include: "*.view.lkml"
explore: orders {
  join: customers {
    sql_on: ${orders.customer_id} = ${customers.id} ;;
  }
}

##########################################################
# FILE: orders.view.lkml                                 #
# Define the dimensions and measures for the ORDERS view #
##########################################################
view: orders {
  dimension: id {
    primary_key: yes
    type: number
    sql: ${TABLE}.id ;;
  }
  dimension: customer_id {      # field: orders.customer_id
    sql: ${TABLE}.customer_id ;;
  }
  dimension: amount {           # field: orders.amount
    type: number
    value_format: "0.00"
    sql: ${TABLE}.amount ;;
  }
  dimension_group: created {                # generates fields:
    type: time                              # orders.created_time, orders.created_date
    timeframes: [time, date, week, month]   # orders.created_week, orders.created_month
    sql: ${TABLE}.created_at ;;
  }
  measure: count {             # field: orders.count
    type: count                # creates a sql COUNT(*)
    drill_fields: [drill_set*] # list of fields to show when someone clicks 'ORDERS Count'
  }
  measure: total_amount {
    type: sum
    sql: ${amount} ;;
  }
  set: drill_set {
    fields: [id, created_time, customers.name, amount]
  }
}

#############################################################
# FILE: customers.view.lkml                                 #
# Define the dimensions and measures for the CUSTOMERS view #
#############################################################
view: customers {
  dimension: id {
    primary_key: yes
    type: number
    sql: ${TABLE}.id ;;
  }
  dimension: city {                    # field: customers.city
    sql: ${TABLE}.city ;;
  }
  dimension: state {                   # field: customers.state
    sql: ${TABLE}.state ;;
  }
  dimension: name {
    sql: CONCAT(${TABLE}.firstname, " ", ${TABLE}.lastname) ;;
  }
  measure: count {             # field: customers.count
    type: count                # creates a sql COUNT(*)
    drill_fields: [drill_set*] # fields to show when someone clicks 'CUSTOMERS Count'
  }
  set: drill_set {                     # set: customers.drill_set
    fields: [id, state, orders.count]  # list of fields to show when someone clicks 'CUSTOMERS Count'
  }
}

LookML은 대소문자를 구분합니다.

LookML은 대소문자를 구분하므로 LookML 요소를 참고할 때는 대소문자가 일치해야 합니다. 사용자가 참조한 요소가 존재하지 않는 경우 Looker에서 알려줍니다. 아래 예에서는 개발자가 "FlightS.&; Looker IDE에 e_FLIGHTS_pdt가 없다는 경고가 표시됩니다. 또한 IDE는 기존 Explore(e_flights_pdt)의 이름을 제안합니다.

그러나 프로젝트에 e_FLIGHTS_pdte_flights_pdt가 모두 포함되어 있는 경우 Looker IDE에서 수정할 수 없으므로 의도한 버전을 확인해야 합니다. 일반적으로 LookML 객체의 이름을 지정할 때는 소문자로 유지하는 것이 좋습니다.

IDE folder 이름도 대소문자를 구분합니다. 파일 경로를 지정할 때마다 폴더 이름의 대소문자와 일치해야 합니다. 예를 들어 Views라는 폴더가 있다면 include 매개변수에 동일한 대문자를 사용해야 합니다. 대소문자가 프로젝트의 기존 폴더와 일치하지 않으면 Looker IDE에 오류가 표시됩니다.

기본 LookML 요소 개요

다음 다이어그램은 기본 LookML 요소와 그 관계를 보여줍니다. 자세한 내용은 LookML 용어 및 개념을 참고하세요.