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을 만들 때 뷰의 별칭을 ${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로 코드 재사용성 극대화