확장 프로그램을 사용하여 코드 재사용

독자가 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에서 수행하는 단계는 다음과 같습니다.

  1. 확장되는 객체 복사: Looker는 확장 중인 뷰, 탐색 또는 LookML 대시보드의 LookML 사본을 만듭니다. 이 새로운 사본은 확장ing 객체입니다.
  2. 두 사본의 LookML 병합: Looker가 확장ed 객체의 LookML을 확장ing 객체로 병합합니다.
  3. 사본 간 충돌 해결: 대부분의 경우 LookML 요소가 확장 객체와 확장ing 객체 모두에 정의된 경우 확장 객체의 버전이 사용됩니다. 하지만 다른 경우에는 광고 확장에서 값을 재정의하는 대신 매개변수 값을 결합합니다. 자세한 내용은 이 페이지의 매개변수 조합 섹션을 참조하세요.
  4. 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 값은 확장edsuggestions: yes을 재정의합니다.
  • 확장ing 보기에는 age라는 측정기준이 있습니다. 이 측정기준은 확장ed 보기에 존재하지 않습니다 (충돌 없음).
  • 확장ed 보기에는 name라는 측정기준이 있습니다. 이 측정기준은 확장ing 뷰에 존재하지 않습니다 (충돌 없음).
  • 확장ing 뷰의 status 측정기준 type: string 값은 확장ed 뷰의 type: number 값을 재정의합니다.
  • status 측정기준에는 sql 매개변수가 있습니다. 이 매개변수는 확장ing 뷰에 존재하지 않습니다 (충돌 없음).

기본 LookML 값이 아직 고려되지 않는 것은 중요한데, 그 이유는 기본값 간의 충돌이 해결되고 있다고 착각하지 않기를 원하기 때문입니다. 실제로는 이 단계에서 무시되고 있는 것입니다. 따라서 객체를 확장할 때 추가 매개변수를 명시적으로 추가해야 합니다.

이 특정 예에서는 sql_table_nameUser 뷰에 추가하지 않았으므로 다음 단계에서 문제가 발생합니다.

4단계: LookML을 정상적으로 해석하기

마지막 단계에서 결과 LookML은 모든 기본값을 포함하여 정상적으로 해석됩니다. 이 예에서 view: user_with_age_extensions는 포함되어 있지만 sql_table_name 매개변수는 없는 LookML로 마무리되었습니다. 따라서 Looker는 sql_table_name 값이 뷰 이름과 같다고 가정합니다.

문제는 데이터베이스에 user_with_age_extensions라는 테이블이 없을 것입니다. 따라서 확장될 모든 뷰에 sql_table_name 매개변수를 추가해야 합니다. 탐색 분석에 view_nameview_label을 추가하면 유사한 문제를 피할 수 있습니다.

확장 확장

확장으로 LookML 객체를 활용하는 방법에는 몇 가지가 있습니다.

고급 사용 사례의 예를 보고 문제 해결 팁을 읽어보려면 고객센터의 고급 extends 사용 사례 문제 해결 도움말을 참고하세요.

동시에 둘 이상의 객체 확장

동시에 2개 이상의 대시보드, 보기 또는 탐색 기능을 확장할 수 있습니다. 예를 들면 다음과 같습니다.

explore: orders {
  extends: [user_info, marketing_info]
}
# Also works for dashboards and views

확장 프로그램 프로세스는 구현 예에 설명된 대로 정확히 작동하지만 충돌 해결 방법에 대한 추가 규칙이 있습니다. extends 매개변수에 나열된 여러 항목 간에 충돌이 발생하는 경우 마지막으로 나열된 항목에 우선순위가 부여됩니다. 따라서 위 예에서 user_infomarketing_info 간에 충돌이 발생하면 marketing_info 탐색이 우선 적용됩니다.

여러 확장 함께 연결

또한 원하는 만큼 확장할 수 있습니다. 예를 들면 다음과 같습니다.

explore: orders {
  extends: [user_info]
  ...
}
explore: user_info {
  extends: [marketing_info]
  ...
}

확장 프로그램 프로세스는 구현 예에 설명된 대로 정확히 작동하고 충돌 해결에 대한 추가 규칙이 있습니다. 충돌이 있는 경우 확장 체인의 마지막 항목에 우선순위가 부여됩니다. 이 예에서는 다음과 같이 정의됩니다.

  • ordersuser_infomarketing_info보다 우선순위가 높습니다.
  • user_infomarketing_info보다 우선순위가 높습니다.

매개변수 결합

대부분의 경우 LookML 요소가 확장ed 개체와 확장ing 개체 모두에 정의된 경우 확장 개체에서 버전이 사용됩니다. 이 페이지의 구현 예에서도 마찬가지였습니다.

하지만 다음과 같은 경우 광고 확장에서는 값을 재정의하는 대신 매개변수 값을 결합합니다.

일부 매개변수가 중복되었습니다.

대부분의 경우 확장 객체에 확장 중인 객체와 동일한 매개변수가 포함된 경우 확장 객체의 값이 확장 객체의 매개변수 값보다 우선 적용됩니다. 하지만 일부 매개변수의 경우 확장자가 추가될 수 있습니다. 즉, 확장 객체의 값이 확장 객체의 값과 함께 사용됩니다.

다음 매개변수는 추가입니다.

다음 예에서 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 모델 현지화 문서 페이지를 참고하세요.