LookML 프로젝트의 각 뷰 파일은 쿼리할 테이블과 해당 테이블의 어떤 필드(측정기준 및 측정)가 Looker UI에 표시될지를 지정하는 Looker 내의 단일 뷰를 정의합니다. 뷰는 데이터베이스의 단일 테이블 또는 파생 테이블 1개에 해당합니다.
이 가이드에서는 다음 주제에 대해 알아봅니다.
- LookML 뷰 파일의 요소와 SQL의 관계
- 원시 SQL, 기본 제공 LookML 케이스 로직, 기본 제공 LookML 빈 로직 중 하나를 사용하여 새 측정기준을 만드는 방법
SQL을 사용하여 LookML에서 파생 테이블을 정의하고 맞춤설정하는 방법을 자세히 알아보려면 파생 테이블에 대한 SQL 개념을 참조하세요.
뷰
다음은 여러 측정기준 및 측정과 함께 쿼리할 데이터베이스 테이블에 대한 정의가 포함된 users.view
라는 뷰 파일의 예시입니다.
view: users {
sql_table_name: thelook.users ;;
dimension: id {
primary_key: yes
type: number
sql: ${TABLE}.id ;;
}
dimension: age {
type: number
sql: ${TABLE}.age ;;
}
measure: average_age {
type: average
sql: ${age} ;; }
dimension_group: created {
type: time
timeframes: [raw, time, date, week, month, quarter, year]
sql: ${TABLE}.created_at ;;
}
measure: count {
type: count
}
}
뷰 정의의 첫 번째 요소는 sql_table_name
파라미터로, 뷰에서 쿼리할 데이터베이스의 테이블을 지정합니다. 이 값은 전체 모델에서 테이블 이름이 정의되는 유일한 위치이며, 뷰에 대한 다른 모든 참조는 테이블 별칭 ${TABLE}
을 사용합니다. 데이터베이스 테이블 이름을 변경하려면 sql_table_name
파라미터에서만 변경하면 됩니다. 데이터베이스 테이블을 참조할 때는 몇 가지 사항을 고려해야 합니다.
Looker는 sql_table_name
값을 사용하여 SQL FROM 절을 작성하고, 그 뒤에 테이블 별칭이 되는 뷰 이름을 붙입니다. 이를 SQL로 변환하면 다음과 같습니다.
FROM `thelook`.`users` AS `users`
Looker는 뷰에 정의된 측정기준과 측정을 사용하여 SQL SELECT 절을 생성합니다. 각 측정기준은 문자열, 숫자, 불리언과 같은 측정기준의 유형과 테이블 별칭을 사용하여 뷰 내에서 측정기준을 참조하는 sql
LookML 파라미터를 정의합니다. age
라는 측정기준의 예시는 다음을 참조하세요.
dimension: age {
type: number
sql: ${TABLE}.age ;;
}
Looker가 데이터베이스로 전송할 SQL을 만들면 Looker는 뷰의 별칭을 ${TABLE}
로 대체합니다. 이전 예의 age
측정기준의 경우 Looker는 다음과 같은 SELECT 절을 생성합니다.
SELECT `users`.`age` AS `users.age`
측정은 측정기준에 대해 수행되는 집계인 경우가 많습니다. 측정의 sql
표현식에서 측정기준 별칭을 지정합니다. 예를 들어 age
측정기준의 평균을 계산하는 측정에는 다음 예시와 같이 별칭이 ${age}
인 sql
표현식이 포함될 수 있습니다.
dimension: age {
type: number
sql: ${TABLE}.age ;;
}
measure: average_age {
type: average
sql: ${age} ;;
}
age
측정기준의 이름을 바꾸면 새 별칭이 측정기준 별칭 참조에 전파됩니다.
뷰 파일 맞춤설정
뷰 파일의 SQL 표현식을 맞춤설정하거나 Looker의 기본 제공 LookML 로직을 사용하여 SQL 표현식의 로직을 모방할 수 있습니다.
SQL 표현식 사용
연령 데이터를 4개 사용자 집단으로 나누고 18세 미만의 사용자를 '청소년', 18~35세의 사용자를 '청년', 36~65세의 사용자를 '중년', 65세 이상의 사용자를 '노년'으로 정의한다고 가정해 보겠습니다. 이렇게 구분하려면 이러한 사용자 집단을 캡처하는 sql
표현식을 사용하여 새 측정기준(예: dimension: age_cohort
)을 정의해야 합니다. 다음 LookML 측정기준 정의는 MySQL 데이터베이스 연결에 적합한 CASE 문을 사용합니다.
dimension: age_cohort {
type: string
sql:
CASE
WHEN ${age} < 18 THEN 'Youth'
WHEN ${age} < 35 THEN 'Young Adult'
WHEN ${age} < 65 THEN 'Older Adult'
ELSE 'Senior'
END ;;
}
이제 연령대 집단을 측정기준으로 정의했으므로 Explore 쿼리에 연령대 집단 측정기준을 포함하여 CASE 로직을 재사용할 수 있습니다.
연령대 집단 측정기준을 사용하여 Explore 쿼리를 만들 때 Explore의 SQL 탭을 사용하여 Looker에서 생성하는 SQL을 확인할 수 있습니다. 연령대 집단 측정기준을 사용하면 SQL은 다음과 같이 표시됩니다.
SELECT
CASE
WHEN users.age < 18 THEN 'Youth'
WHEN users.age < 35 THEN 'Young Adult'
WHEN users.age < 65 THEN 'Older Adult'
ELSE 'Senior'
END AS `users.age_cohort`,
AVG(`age`) AS `users.average_age`,
COUNT(*) AS `users.count`
FROM
`thelook`.`users` AS `users`
GROUP BY
1
ORDER BY
2 DESC
LIMIT 500
Looker의 기본 제공 케이스 로직 사용
데이터베이스와 독립적인 표현식을 사용하여 SQL CASE 문과 동일한 효과를 얻을 수 있습니다. LookML case
파라미터를 사용하면 sql
표현식을 사용하여 결과에 라벨을 지정하는 특정 조건과 문자열을 캡처하는 when
문으로 구성된 사용자 집단 버킷을 정의할 수 있습니다.
다음은 case
LookML 파라미터로 작성된 동일한 새 age_cohort
측정기준의 예시입니다.
dimension: age_cohort {
case: {
when: {
sql: ${age} < 18 ;;
label: "Youth"
}
when: {
sql: ${age} < 35 ;;
label: "Young Adult"
}
when: {
sql: ${age} < 65 ;;
label: "Middle-aged Adult"
}
else: "Older Adult"
}
}
런타임에 Looker는 데이터베이스에 맞는 올바른 SQL CASE 구문을 빌드합니다. 또한 Looker에서는 그룹 정렬을 처리하기 위한 다른 표현식을 빌드하므로 결과 라벨이 영숫자 순으로 정렬되지 않습니다 (정렬 순서를 정의하지 않는 한). Looker는 다음과 유사한 결과 SQL 쿼리를 빌드합니다.
SELECT
CASE
WHEN users.age < 18 THEN '0'
WHEN users.age < 35 THEN '1'
WHEN users.age < 65 THEN '2'
ELSE '3'
END AS `users.age_cohort__sort_`,
CASE
WHEN users.age < 18 THEN 'Youth'
WHEN users.age < 35 THEN 'Young Adult'
WHEN users.age < 65 THEN 'Older Adult'
ELSE 'Senior'
END AS `users.age_cohort`,
AVG(`age`) AS `users.average_age`,
COUNT(*) AS `users.count`
FROM
`thelook`.`users` AS `users`
GROUP BY
1,
2
ORDER BY
1
LIMIT 500
Looker의 기본 제공 구간 또는 등급 로직 사용
숫자 값을 그룹화하는 방법을 지정하는 또 다른 방법은 Looker의 기본 제공 bin
또는 tier
파라미터 유형을 사용하는 것입니다. type:bin
은 bins
파라미터와 함께 사용되며, 마찬가지로 type: tier
은tiers
파라미터와 함께 사용되어 숫자 측정기준을 일련의 숫자 범위로 구분합니다. 단, 각 빈에 대해 라벨을 정의할 수 없다는 단점이 있습니다.
다음 LookML 예시에서는 측정기준에 bins
파라미터를 사용하여 각 세트의 최솟값을 정의합니다.
dimension: age_cohort {
type: bin
bins: [18,36,65]
style: integer
sql: ${age} ;;
}
측정기준에서도 tiers
파라미터를 정확히 동일한 방식으로 사용할 수 있습니다. 예를 들면 다음과 같습니다.
dimension: age_cohort {
type: tier
tiers: [18,36,65]
style: integer
sql: ${age} ;;
}
그러면 Looker에서 다음과 같은 SQL 문을 생성합니다.
SELECT
CASE
WHEN users.age < 18 THEN '0'
WHEN users.age >= 18 AND users.age < 36 THEN '1'
WHEN users.age >= 36 AND users.age < 65 THEN '2'
WHEN users.age >= 65 THEN '3'
ELSE '4'
END AS `users.age_cohort__sort_`,
CASE
WHEN users.age < 18 THEN 'Below 18'
WHEN users.age >= 18 AND users.age < 36 THEN '18 to 35'
WHEN users.age >= 36 AND users.age < 65 THEN '36 to 64'
WHEN users.age >= 65 THEN '65 or Above'
ELSE 'Undefined'
END AS `users.age_cohort`,
AVG(`age`) AS `users.average_age`,
COUNT(*) AS `users.count`
FROM
`thelook`.`users` AS `users`
GROUP BY
1,
2
ORDER BY
1
LIMIT 500
관련 리소스
- 조인에 대한 SQL 개념
- 파생 테이블의 SQL 개념
- Looker의 SQL 생성기 사용
- Looker가 SQL을 생성하는 방법
- Looker 설명서: DRY LookML로 코드 재사용성 극대화