본 포스트는 2024년 Google Study Jam을 공부하면서 개인적으로 내용을 정리한 포스트 입니다.
LookML은 Looker 모델링 언어의 줄임말로 Looker에서 시맨틱 데이터 모델을 만들기 위해 사용되는 언어다.
LookML을 사용하여 SQL DB의 측정기준, 집계, 계산, 데이터 관계를 설명할 수 있다.
Looker는 LookML로 작성된 모델을 사용하여 특정 데이터베이스에 대해 SQL 쿼리를 작성한다.
더 자세한 내용은 다음 링크에서 확인할 수 있다.
Qwik Start - LookML Structures
먼저 LookML의 구조에 대해 알아보자
LookML의 계층 구조는 다음 객체를 사용하여 구성된다.
- Project
- LookML 코드 라이브러리로, LookML은 버전 제어를 위해 Git을 사용하므로 각 프로젝트에서 1:1로 Git 저장소를 매핑하는 것이 가장 좋다.
- 프로젝트는 하나 이상의 모델로 구성된다.
- SQL Query에서 가능하다면 Looker에서도 가능해야 한다.(DB 콘솔에서 SELECT로 어떤 일을 하는 문장을 직접 쓸 수 있다면 LookML을 코딩하여 Looker가 같은 일을 하도록 할 수도 있다.)
- Model
- 비즈니스 영역 또는 필요에 따른 Explores의 집합이다. Explore는 비즈니스 사용자 분석을 위한 사전 조인된 뷰의 집합이다.
- 각 모델에는 하나 이상의 Explore가 포함된다.
- 모델은 데이터 연결 정보와 정의를 포함하고 특정 Explore에 대한 사용자 액세스를 제한하고 사업 영역별로 구분하고 구성할 수 있다.
- Explore
- 일반적으로 특정 비즈니스 질문을 타겟팅하기 위해 결합된 하나 이상의 뷰이다.
- 사용자의 혼란을 최소화하기 위해 비즈니스 테마를 중심으로 구성되어야 한다.
- Explore는 Frontend에서 분석의 "Driver"로 여기에는 하나 이상의 뷰가 결합되어 있으며, 각각은 일반적으로 특정 비즈니스 질문을 대상으로한다.
- "비즈니스 문의 및 사용 사례를 위해 자주 결합되는 미리 정의된 테이블 세트"로 생각하면 이해가 쉽다.
- Views
- 차원(데이터 속성)과 측정값(차원의 집계)을 정의하는 곳이다.
- COUNT 각 뷰에는 차원(DB Columns 또는 이를 논리적으로 표현한것)과 측정값(고객이나 SUM 비용과 같은 차원에 대한 집계 함수)이 포함된다.
- 표준 뷰는 DB 테이블에 이미 있는 내용을 추상화한다.
- 가상 테이블은 파생 테이블이라고도 하며, DB에 실제 테이블인것 처럼 사용되는 Query이다.
- Dimensions
- LookML 객체의 가장 낮은 수준은 "dimensions" 또는 "measures"이 될 수 있는 필드이다.
- 차원은 Looker가 테이블에서 뷰 파일을 생성할 때 DB 테이블에 이미 있는 모든 열에 대해 생성된다.
- 테이블 열의 논리적 표현으로 사용될 추가 차원을 생성할 수도 있다, 이는 SQL 문의 SELECT, GROUP BY절에 나타난다. 이는 데이터를 설명하는 속성이다.
- Measures
- Measures은 DB 테이블에 명시적으로 존재하지 않는 집계이다.
- LookML에서 생성해야하고 차원을 합계나 카운트와 같은 값으로 집계한다.
- Looker에서 생성한 SQL의 "GROUP BY"문에는 표시되지 않는다.
- 대신 Dimenstions에 따라 해당 그룹을 결정한다.
Qwik Start - Task1. Create a View
- 토글 버튼을 눌러 "Development Mode"를 활성성화 한다.
- "Develop" 탭에서 "qwiklabs-ecommerce" LookML 프로젝트를 누른다.
- 상단에 "+" 버튼을 눌러서 "Create View"를 통해 View를 만든다.
이렇게 만들어진 View 파일에 dimensions와 measures를 추가한다.
1. View 이름과 View를 연결하려는 SQL 테이블 이름을 지정하여 시작한다.
sql_table_name: `cloud-training-demos.looker_ecomm.users` ;;
2. User의 "id, country, email, first_name, last_name" dimensions를 추가한다.
dimension: id {
primary_key: yes
type: number
sql: ${TABLE}.id ;;
}
dimension: country {
type: string
map_layer_name: countries
sql: ${TABLE}.country ;;
}
dimension: email {
type: string
sql: ${TABLE}.email ;;
}
dimension: first_name {
type: string
sql: ${TABLE}.first_name ;;
}
dimension: last_name {
type: string
sql: ${TABLE}.last_name ;;
}
3. measure을 추가한다. (특정 치수를 카운트하는데 사용된다.)
measure: count {
type: count
drill_fields: [id, last_name, first_name]
}
4. "Save Changes"를 눌러 프로젝트를 저장하고 "Commit & Push"로 업로드한다.
Qwik Start - Task2. Join a view to an existing Explore
1. 사이드바에서 "model" 폴더에있는 "training_ecommerce.model" 파일을 클릭하여 편집창에 연다.
2. "explore: events" 정의에서 "join: users" 뒤에 새 줄을 추가하고 다음을 붙여 넣는다.
join: users_limited {
type: left_outer
sql_on: ${events.user_id} = ${users_limited.id};;
relationship: many_to_one
}
3. "Save Changes"를 눌러 저장한다. (결과물은 다음 이미지와 유사해야함!)
4. 파일 이름 옆에 caret을 눌러 Explore Events를 클릭한다.
5. 좌측에 탐색기에서 Users Limited를 누른다.
6. Run을 눌러 결과를 확인한다.
7. "training_ecommerce.model" 파일로 돌아와 Validate LookML을 누르고, Commit Changes & Push를 누른다.