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_pdt
과 e_flights_pdt
가 모두 포함되어 있는 경우 Looker IDE에서 수정할 수 없으므로 의도한 버전을 확인해야 합니다. 일반적으로 LookML 객체의 이름을 지정할 때는 소문자로 유지하는 것이 좋습니다.
IDE folder 이름도 대소문자를 구분합니다. 파일 경로를 지정할 때마다 폴더 이름의 대소문자와 일치해야 합니다. 예를 들어 Views
라는 폴더가 있다면 include
매개변수에 동일한 대문자를 사용해야 합니다. 대소문자가 프로젝트의 기존 폴더와 일치하지 않으면 Looker IDE에 오류가 표시됩니다.
기본 LookML 요소 개요
다음 다이어그램은 기본 LookML 요소와 그 관계를 보여줍니다. 자세한 내용은 LookML 용어 및 개념을 참고하세요.