독자가 LookML에 대해 잘 알고 있다고 가정하고 있는 고급 주제입니다.
개요
LookML 모델의 크기와 복잡성이 증가함에 따라 LookML을 여러 위치에서 재사용하는 것이 점점 더 유용해지고 있습니다. extends
매개변수를 사용하면 코드를 재사용할 수 있어 다음 작업을 할 수 있습니다.
- 한 곳에서 코드를 정의할 수 있도록 DRY (반복하지 마세요) 코드를 작성하여 코드를 더 일관되고 빠르게 수정하도록 하세요.
- 사용자별로 서로 다른 필드 집합 관리
- 프로젝트의 다양한 부분에서 디자인 패턴 공유
- 프로젝트 전체에서 조인, 측정기준 또는 측정값 재사용
LookML 객체를 확장하려면 새 LookML 객체를 만든 다음 extends
매개변수를 추가하여 새 객체가 기존 객체의 확장 프로그램임을 표시합니다. 즉, 프로젝트에 LookML 객체 버전이 두 개 있습니다. 충돌이 있는 경우 확장 객체가 우선 적용되며 확장되는 객체의 설정을 재정의합니다. 자세한 내용은 이 페이지의 뒷부분에 있는 extends
의 구현 세부정보 섹션을 참고하세요.
LookML 상세검색을 확인하세요.
뷰 또는 탐색 뷰를 확장하는 것은 여러 버전의 뷰 또는 탐색 분석을 설정하려는 경우에 이상적입니다. 그러나 목표가 포함된 LookML 파일을 수정하지 않고 뷰 또는 탐색 항목을 수정하는 것이 목표라면 상세검색을 사용하는 것이 좋습니다. 상세검색 내에extends
매개변수를 사용할 수도 있습니다. 자세한 내용 및 사용 사례는 LookML 개선 문서 페이지를 참고하세요.
뷰, Explore, LookML 대시보드를 확장할 수 있습니다.
모델은 확장할 수 없으며 모델 파일을 다른 모델 파일에 포함할 수 없습니다. 대신 모델 간에 탐색을 재사용하거나 확장하려면 별도의 탐색 파일을 만들고 모델 파일에 해당 탐색 파일을 포함하면 됩니다.
탐색 확장 및 LookML 대시보드 확장에 대한 다음 예를 참고하세요.
탐색 확장
다음은 탐색 분석을 확장하는 예입니다.
explore: customer {
persist_for: "12 hours"
}
explore: transaction {
extends: [customer]
persist_for: "5 minutes"
}
이 예에서는 고객이라는 탐색 분석이 있고 두 번째 탐색 분석인 거래가 이를 확장했습니다. 조인과 같은 고객의 모든 항목은 트랜잭션에 포함됩니다. Transaction에 있는 모든 항목은 Transaction에 남아 있습니다.
하지만 충돌이 있습니다. 고객 탐색에 persist_for
설정이 12시간이어야 하지만 거래 탐색에는 5분이 표시되어야 한다고 나와 있습니다. 거래 탐색의 경우 persist_for: "5 minutes"
설정이 사용됩니다. 탐색 확장 프로그램에서 설정을 덮어쓰기 때문입니다.
LookML 대시보드 확장
LookML 대시보드를 확장하려면 확장 대시보드와 확장 대시보드가 모두 모델 파일에 포함되어 있어야 합니다. extends
매개변수를 사용하는 대시보드가 확장되는 기본 대시보드가 없는 모델 파일에 포함된 경우, 기본 대시보드가 찾을 수 없다는 등의 다른 오류와 함께 LookML 유효성 검사 오류가 발생합니다.
대시보드 파일의 예는 다음과 같습니다.
파일: faa.dashboard.lookml
- dashboard: faa
title: FAA Dashboard
layout: newspaper
elements:
- title: Aircraft Location
name: Aircraft Location
model: e_faa
explore: aircraft
type: looker_map
fields:
- aircraft.zip
- aircraft.count
sorts:
- aircraft.count desc
limit: 500
query_timezone: America/Los_Angeles
series_types: {}
row: 0
col: 0
width: 8
height: 6
새 LookML 대시보드 파일을 만들고 새 타일을 추가하여 FAA 대시보드를 확장할 수 있습니다.
파일: faa_additional.dashboard.lookml
- dashboard: faa_additional
title: FAA Additional
extends: faa
elements:
- title: Elevation Count
name: Elevation Count
model: e_faa
explore: airports
type: looker_scatter
fields:
- airports.elevation
- airports.count
sorts:
- airports.count desc
limit: 500
query_timezone: America/Los_Angeles
row: 0
col: 8
width: 8
height: 6
FAA 대시보드를 확장하기 때문에 FAA Additional 대시보드에는 faa.dashboard.lookml
파일에 정의된 타일이 포함됩니다. 또한 FAA 추가 대시보드에는 자체 faa_additional.dashboard.lookml
파일에 정의된 타일이 있습니다.
LookML 대시보드를 만드는 가장 쉬운 방법은 사용자 정의 대시보드에서 LookML을 가져오는 것입니다. 이 기법을 사용하여 개별 대시보드 타일의 LookML을 가져올 수도 있습니다. 이 방법을 사용하는 경우 타일의 위치가 겹치지 않도록 하세요. 위의 예에서 타일은 모두 대시보드 맨 위에 있으며 row: 0
로 표시됩니다.
파일: faa.dashboard.lookml
row: 0
col: 0
width: 8
height: 6
하지만 FAA 추가 대시보드에 추가되는 새 타일은 col: 8
에 있으므로 확장 대시보드에서 타일 옆에 표시됩니다.
파일: faa_additional.dashboard.lookml
row: 0
col: 8
width: 8
height: 6
이러한 요소는 다른 대시보드 파일에 있으므로 놓치기 쉽습니다. 따라서 확장 대시보드에 타일을 추가하는 경우 확장 대시보드의 타일과 확장 대시보드의 타일 간에 위치 충돌이 있는지 확인해야 합니다.
확장 프로그램 필요
extension: required
매개변수를 사용하여 LookML 객체를 확장 프로그램으로 표시할 수 있습니다. 즉, 객체를 단독으로 사용할 수 없습니다. extension: required
가 있는 객체는 그 자체로 사용자에게 표시되지 않습니다. 이는 다른 LookML 객체로 확장되는 시작점으로만 사용됩니다. extension
매개변수는 탐색, 뷰, LookML 대시보드에서 지원됩니다.
extension: required
가 있는 explore
는 데이터 테스트의 explore_source
로 사용할 수 없습니다. LookML 검사기에서 explore_source
을 찾을 수 없다는 오류가 발생합니다.
메타데이터를 사용하여 객체의 확장 프로그램 보기
Looker IDE에서 explore
또는 view
매개변수를 클릭하고 메타데이터 패널을 사용하여 객체의 확장 프로그램을 확인하거나 객체가 확장되는 객체를 확인할 수 있습니다. 자세한 내용은 LookML 객체의 메타데이터 문서 페이지를 참고하세요.
extends
의 구현 세부정보
LookML 객체를 확장할 때 Looker에서 수행하는 단계는 다음과 같습니다.
- 확장되는 객체 복사: Looker는 확장 중인 뷰, 탐색 또는 LookML 대시보드의 LookML 사본을 만듭니다. 이 새로운 사본은 확장ing 객체입니다.
- 두 사본의 LookML 병합: Looker가 확장ed 객체의 LookML을 확장ing 객체로 병합합니다.
- 사본 간 충돌 해결: 대부분의 경우 LookML 요소가 확장 객체와 확장ing 객체 모두에 정의된 경우 확장 객체의 버전이 사용됩니다. 하지만 다른 경우에는 광고 확장에서 값을 재정의하는 대신 매개변수 값을 결합합니다. 자세한 내용은 이 페이지의 매개변수 조합 섹션을 참조하세요.
- LookML 적용: 모든 충돌이 해결되면 Looker가 표준 로직을 사용하여 결과 LookML을 해석합니다. 즉, Looker는 다른 뷰, 탐색 또는 LookML 대시보드와 마찬가지로 모든 표준 기본값 및 가정을 사용합니다.
다음 섹션에서는 뷰를 예시로 확장하여 이러한 단계의 세부사항을 보여줍니다. 다음은 기본 보기인 사용자 뷰의 LookML입니다.
view: user {
suggestions: yes
dimension: name {
sql: ${TABLE}.name ;;
}
dimension: status {
sql: ${TABLE}.status ;;
type: number
}
}
다음은 사용자 뷰를 확장하는 User Extensions(연령 연장 사용자) 뷰의 LookML입니다.
include: "/views/user.view"
view: user_with_age_extensions {
extends: [user]
suggestions: no
dimension: age {
type: number
sql: ${TABLE}.age ;;
}
dimension: status {
type: string
}
}
1단계: LookML 복사
이 경우에는 user
뷰가 user_with_age_extensions
뷰로 확장됩니다. user
는 확장되는 뷰이므로 병합 전에 뷰의 사본이 생성됩니다. 사본이 생성되었다는 사실은 여기에서 특히 중요합니다. 원래 user
뷰는 변경되지 않고 평소대로 사용할 수 있도록 하는 것이 중요합니다.
2단계: 사본 병합
다음 단계는 확장ed 뷰(user
)의 모든 LookML을 확장ing 뷰(user_with_age_extensions
)로 병합하는 것입니다. 단순히 병합 ML의 병합인 병합의 성격을 이해하는 것이 중요합니다. 실질적으로는 명시적으로 작성된 LookML이 병합되지만 쓰기하지 않은 기본 LookML 값은 병합된다는 의미입니다. 어떤 면에서 보면 LookML의 텍스트는 합쳐질 뿐이며 이 텍스트의 의미는 없습니다.
3단계: 충돌 해결
세 번째 단계는 병합된 뷰 간의 충돌을 해결하는 것입니다.
대부분의 경우 LookML 요소가 확장ed 개체와 확장ing 개체 모두에 정의된 경우 확장 개체에서 버전이 사용됩니다. 하지만 다른 경우에는 광고 확장에서 값을 재정의하는 대신 매개변수 값을 결합합니다. 자세한 내용은 이 페이지의 매개변수 조합 섹션을 참조하세요.
user_with_age_extensions
예의 경우 매개변수가 추가되지 않고 특별한 목록 옵션 또는 sql
키워드가 지정되지 않으므로 확장 뷰의 매개변수 값이 확장 뷰의 매개변수 값을 재정의합니다.
- 확장ing 보기 이름 (
user_with_age_extensions
)은 확장ed 보기 이름 (user
)을 재정의합니다. suggestions: no
의 확장ing 값은 확장ed 값suggestions: yes
을 재정의합니다.- 확장ing 보기에는
age
라는 측정기준이 있습니다. 이 측정기준은 확장ed 보기에 존재하지 않습니다 (충돌 없음). - 확장ed 보기에는
name
라는 측정기준이 있습니다. 이 측정기준은 확장ing 뷰에 존재하지 않습니다 (충돌 없음). - 확장ing 뷰의
status
측정기준type: string
값은 확장ed 뷰의type: number
값을 재정의합니다. status
측정기준에는sql
매개변수가 있습니다. 이 매개변수는 확장ing 뷰에 존재하지 않습니다 (충돌 없음).
기본 LookML 값이 아직 고려되지 않는 것은 중요한데, 그 이유는 기본값 간의 충돌이 해결되고 있다고 착각하지 않기를 원하기 때문입니다. 실제로는 이 단계에서 무시되고 있는 것입니다. 따라서 객체를 확장할 때 추가 매개변수를 명시적으로 추가해야 합니다.
- 뷰를 확장할 때
sql_table_name
및include
매개변수를 추가합니다. - 탐색을 확장할 때
view_name
및view_label
매개변수를 추가합니다.
이 특정 예에서는 sql_table_name
를 User 뷰에 추가하지 않았으므로 다음 단계에서 문제가 발생합니다.
4단계: LookML을 정상적으로 해석하기
마지막 단계에서 결과 LookML은 모든 기본값을 포함하여 정상적으로 해석됩니다. 이 예에서 view: user_with_age_extensions
는 포함되어 있지만 sql_table_name
매개변수는 없는 LookML로 마무리되었습니다. 따라서 Looker는 sql_table_name
값이 뷰 이름과 같다고 가정합니다.
문제는 데이터베이스에 user_with_age_extensions
라는 테이블이 없을 것입니다. 따라서 확장될 모든 뷰에 sql_table_name
매개변수를 추가해야 합니다. 탐색 분석에 view_name
및 view_label
을 추가하면 유사한 문제를 피할 수 있습니다.
확장 확장
확장으로 LookML 객체를 활용하는 방법에는 몇 가지가 있습니다.
- 객체는 다른 여러 객체를 확장할 수 있습니다.
- 확장 객체 자체를 확장할 수 있습니다.
- 확장 프로그램은 상세검색에 사용할 수 있습니다 (자세한 내용은 LookML 상세검색 문서 페이지 참고).
고급 사용 사례의 예를 보고 문제 해결 팁을 읽어보려면 고객센터의 고급
extends
사용 사례 문제 해결 도움말을 참고하세요.
동시에 둘 이상의 객체 확장
동시에 2개 이상의 대시보드, 보기 또는 탐색 기능을 확장할 수 있습니다. 예를 들면 다음과 같습니다.
explore: orders {
extends: [user_info, marketing_info]
}
# Also works for dashboards and views
확장 프로그램 프로세스는 구현 예에 설명된 대로 정확히 작동하지만 충돌 해결 방법에 대한 추가 규칙이 있습니다. extends
매개변수에 나열된 여러 항목 간에 충돌이 발생하는 경우 마지막으로 나열된 항목에 우선순위가 부여됩니다. 따라서 위 예에서 user_info
과 marketing_info
간에 충돌이 발생하면 marketing_info
탐색이 우선 적용됩니다.
여러 확장 함께 연결
또한 원하는 만큼 확장할 수 있습니다. 예를 들면 다음과 같습니다.
explore: orders {
extends: [user_info]
...
}
explore: user_info {
extends: [marketing_info]
...
}
확장 프로그램 프로세스는 구현 예에 설명된 대로 정확히 작동하고 충돌 해결에 대한 추가 규칙이 있습니다. 충돌이 있는 경우 확장 체인의 마지막 항목에 우선순위가 부여됩니다. 이 예에서는 다음과 같이 정의됩니다.
orders
는user_info
및marketing_info
보다 우선순위가 높습니다.user_info
는marketing_info
보다 우선순위가 높습니다.
매개변수 결합
대부분의 경우 LookML 요소가 확장ed 개체와 확장ing 개체 모두에 정의된 경우 확장 개체에서 버전이 사용됩니다. 이 페이지의 구현 예에서도 마찬가지였습니다.
하지만 다음과 같은 경우 광고 확장에서는 값을 재정의하는 대신 매개변수 값을 결합합니다.
- 추가 매개변수의 경우
EXTENDED*
목록 키워드 사용sql
매개변수에 대한${EXTENDED}
키워드 사용
일부 매개변수가 중복되었습니다.
대부분의 경우 확장 객체에 확장 중인 객체와 동일한 매개변수가 포함된 경우 확장 객체의 값이 확장 객체의 매개변수 값보다 우선 적용됩니다. 하지만 일부 매개변수의 경우 확장자가 추가될 수 있습니다. 즉, 확장 객체의 값이 확장 객체의 값과 함께 사용됩니다.
다음 매개변수는 추가입니다.
측정기준 및 측정의 경우
보기:
탐색 분석:
다음 예에서 carriers
뷰는 link
매개변수가 있는 name
측정기준을 가지고 있습니다.
view: carriers {
sql_table_name: flightstats.carriers ;;
dimension: name {
sql: ${TABLE}.name ;;
type: string
link: {
label: "Google {{ value }}"
url: "http://www.google.com/search?q={{ value }}"
icon_url: "http://google.com/favicon.ico"
}
}
}
다음은 carriers
뷰를 확장하는 carriers_extended
뷰입니다. carriers_extended
뷰에는 link
매개변수의 설정이 다른 name
측정기준도 있습니다.
include: "/views/carriers.view.lkml"
view: carriers_extended {
extends: [carriers]
dimension: name {
sql: ${TABLE}.name ;;
type: string
link: {
label: "Dashboard for {{ value }}"
url: "https://docsexamples.dev.looker.com/dashboards/307?Carrier={{ value }}"
icon_url: "https://www.looker.com/favicon.ico"
}
}
}
carriers_extended
보기에서 link
매개변수 2개가 추가되어 name
측정기준에 링크가 두 개 있습니다. 탐색 분석에서 사용되는 측정기준은 다음과 같습니다.
목록이 있는 추가 옵션
목록을 사용할 때는 확장 객체 목록을 사용하는 대신 이 목록을 결합할 수 있습니다. animals
라는 충돌하는 목록이 있는 간단한 확장 프로그램을 생각해 보세요.
view: pets {
extends: fish
set: animals {
fields: [dog, cat]
}
}
view: fish {
set: animals {
fields: [goldfish, guppy]
}
}
이 경우 pets
뷰는 확장을 실행하므로 성공하여 animals
가 [dog, cat]
를 포함하게 됩니다. 그러나 특수 EXTENDED*
세트를 사용하면 대신 목록을 결합할 수 있습니다.
view: pets {
extends: fish
set: animals {
fields: [dog, cat, EXTENDED*]
}
}
view: fish {
set: animals {
fields: [goldfish, guppy]
}
}
이제 animals
목록에 [dog, cat, goldfish, guppy]
가 포함됩니다.
충돌 해결 중에 교체하는 대신 결합
대부분의 경우 확장 중에 충돌이 발생하면 확장 객체가 우선합니다. 예를 들어 다음과 같이 간단한 확장 프로그램을 사용합니다.
view: product_short_descriptions {
extends: products
dimension: description {
sql: ${TABLE}.short_description ;;
}
}
view: products {
dimension: description {
sql: ${TABLE}.full_description ;;
}
}
description
측정기준 내에서 sql
매개변수가 충돌함을 확인할 수 있습니다. 일반적으로 product_short_descriptions
의 정의는 확장을 수행하므로 단순히 products
의 정의를 덮어씁니다.
그러나 원하는 경우 정의를 결합할 수도 있습니다. 이렇게 하려면 다음과 같이 ${EXTENDED}
키워드를 사용합니다.
view: product_short_descriptions {
extends: products
dimension: description {
sql: LEFT(${EXTENDED}, 50) ;;
}
}
view: products {
dimension: description {
sql: ${TABLE}.full_description ;;
}
}
이제 sql
매개변수의 충돌이 다르게 처리됩니다. product_short_descriptions
정의가 낙찰되는 대신 products
에서 정의를 가져와 ${EXTENDED}
가 사용되는 위치에 삽입합니다. 이 경우 description
의 정의 정의는 LEFT(${TABLE}.full_description, 50)
입니다.
고려사항
현지화가 있는 프로젝트
객체를 확장할 때는 현지화 규칙도 확장 프로그램에 적용된다는 점에 유의하세요. 객체를 확장한 다음 새 라벨 또는 설명을 정의하는 경우 프로젝트의 언어 문자열 파일에 현지화 정의를 제공해야 합니다. 자세한 내용은 LookML 모델 현지화 문서 페이지를 참고하세요.