기본 파생 테이블 만들기

파생 테이블은 파생 테이블이 데이터베이스의 실제 테이블인 것처럼 결과가 사용되는 쿼리입니다. 기본 파생 테이블은 LookML 용어를 사용하여 정의하는 쿼리를 기반으로 합니다. 이는 SQL 용어로 정의하는 쿼리를 기반으로 하는 SQL 기반 파생 테이블과 다릅니다. SQL 기반 파생 테이블과 달리 기본 파생 테이블은 데이터를 모델링할 때 훨씬 쉽게 읽고 이해할 수 있습니다. 자세한 내용은 Looker의 파생 테이블 문서 페이지에서 기본 파생 테이블 및 SQL 기반 파생 테이블 섹션을 참조하세요.

기본 및 SQL 기반 파생 테이블은 모두 수준에서 derived_table 매개변수를 사용하여 LookML에 정의됩니다. 하지만 기본 파생 테이블에서는 SQL 쿼리를 만들 필요가 없습니다. 대신 explore_source 매개변수를 사용하여 파생 테이블, 원하는 열, 기타 원하는 특성을 기반으로 하는 탐색을 지정합니다.

SQL Runner를 사용하여 파생 테이블 만들기 문서 페이지에 설명된 대로 Looker가 SQL Runner 쿼리에서 파생 테이블 LookML을 만들도록 할 수도 있습니다.

탐색을 사용하여 기본 파생 테이블 정의 시작하기

탐색부터 시작하여 Looker는 파생된 테이블의 전체 또는 대부분에 대해 LookML을 생성할 수 있습니다. 탐색을 만들고 파생된 테이블에 포함할 모든 필드를 선택하면 됩니다. 그런 다음 기본 파생 테이블 LookML을 생성하려면 다음 단계를 따르세요.

  1. 작업 탐색 톱니바퀴 메뉴를 선택하고 LookML 가져오기를 선택합니다.

  2. 파생 테이블 탭을 클릭하여 탐색의 기본 파생 테이블을 만드는 LookML을 확인합니다.

  3. LookML을 복사합니다.

이제 생성된 LookML을 복사했으므로 뷰 파일에 붙여넣습니다.

  1. 개발 모드에서 프로젝트 파일로 이동합니다.

  2. Looker IDE에서 프로젝트 파일 목록 상단에 있는 +를 클릭하고 뷰 만들기를 선택합니다. 또는 폴더 메뉴를 클릭하고 메뉴에서 뷰 만들기를 선택하여 폴더 내에 파일을 만들 수 있습니다.

  3. 뷰 이름을 의미 있는 이름으로 설정합니다.

  4. 원하는 경우 열 이름을 변경하고, 파생 열을 지정하고, 필터를 추가합니다.

탐색에서 type: count 측정 값을 사용할 때 시각화는 개수라는 단어가 아닌 뷰 이름으로 결과 값에 라벨을 지정합니다. 혼란을 방지하려면 뷰 이름을 복수화합니다. 시각화 설정의 시리즈에서 전체 필드 이름 표시를 선택하거나 복수형의 뷰 이름과 함께 view_label 매개변수를 사용하여 뷰 이름을 변경할 수 있습니다.

LookML에서 기본 파생 테이블 정의

SQL 또는 기본 LookML에서 선언된 파생 테이블을 사용하는지에 관계없이 derived_table 쿼리의 출력은 열 집합이 포함된 테이블입니다. 파생 테이블이 SQL로 표현되면 출력 열 이름은 SQL 쿼리에 의해 암시됩니다. 예를 들어 다음 SQL 쿼리에는 출력 열 user_id, lifetime_number_of_orders, lifetime_customer_value가 있습니다.

SELECT
  user_id
  , COUNT(DISTINCT order_id) as lifetime_number_of_orders
  , SUM(sale_price) as lifetime_customer_value
FROM order_items
GROUP BY 1

Looker에서 쿼리는 탐색을 기반으로 하며, 측정 및 측정기준 필드를 포함하고, 적용 가능한 필터를 추가하며, 정렬 순서를 지정할 수도 있습니다. 기본 파생 테이블에는 이러한 모든 요소와 열의 출력 이름이 포함됩니다.

다음의 간단한 예시에서는 user_id, lifetime_customer_value, lifetime_number_of_orders라는 3개의 열이 있는 파생 테이블을 생성합니다. SQL에서 쿼리를 수동으로 작성할 필요가 없습니다. 대신 Looker가 지정된 탐색 order_items 및 이러한 탐색의 필드 중 일부(order_items.user_id, order_items.total_revenue, order_items.order_count)를 사용하여 쿼리를 만듭니다.

view: user_order_facts {
  derived_table: {
    explore_source: order_items {
      column: user_id {
        field: order_items.user_id
      }
      column: lifetime_number_of_orders {
        field: order_items.order_count
      }
      column: lifetime_customer_value {
        field: order_items.total_revenue
      }
    }
  }
  # Define the view's fields as desired
  dimension: user_id {
    hidden: yes
  }
  dimension: lifetime_number_of_orders {
    type: number
  }
  dimension: lifetime_customer_value {
    type: number
  }
}

include 문을 사용하여 필드 참조 사용 설정

기본 파생 테이블의 뷰 파일에서 explore_source 매개변수를 사용하여 탐색을 가리키고 기본 파생 테이블의 열과 기타 특성을 정의합니다.

기본 파생 테이블의 뷰 파일에서는 include 매개변수를 사용하여 탐색 정의가 포함된 파일을 가리킬 필요가 없습니다. include 문이 없으면 Looker IDE가 필드 이름을 자동 추천하거나 기본 파생 테이블을 빌드할 때 필드 참조를 확인하지 않습니다. 대신 LookML 검사기를 사용하여 기본 파생 테이블에서 참조하는 필드를 확인할 수 있습니다.

하지만 Looker IDE에서 자동 제안 및 즉시 필드 확인을 사용 설정하거나 동일 이름 또는 순환 참조 가능성이 있는 탐색이 여러 개 있는 복잡한 LookML 프로젝트가 있는 경우 include 매개변수를 사용하여 탐색 정의 위치를 지정할 수 있습니다.

탐색은 모델 파일 내에서 정의되는 경우가 많지만 기본 파생 테이블의 경우 탐색에 대해 별도의 파일을 만드는 것이 더 깔끔합니다. LookML Explore 파일에는 Explore 파일 만들기 문서에 설명된 대로 .explore.lkml 파일 확장자가 있습니다. 이렇게 하면 기본 파생 테이블 뷰 파일에서 전체 모델 파일이 아닌 단일 Explore 파일을 포함할 수 있습니다.

별도의 Explore 파일을 만들고 include 매개변수를 사용하여 기본 파생 테이블의 뷰 파일에 있는 Explore 파일을 가리키려면 LookML 파일이 다음 요구사항을 충족하는지 확인합니다.

  • 기본 파생 테이블의 뷰 파일에는 탐색의 파일이 포함되어야 합니다. 예를 들면 다음과 같습니다.
    • include: "/explores/order_items.explore.lkml"
  • 탐색 파일에는 필요한 보기 파일이 포함되어야 합니다. 예를 들면 다음과 같습니다.
    • include: "/views/order_items.view.lkml"
    • include: "/views/users.view.lkml"
  • 모델에는 탐색의 파일이 포함되어야 합니다. 예를 들면 다음과 같습니다.
    • include: "/explores/order_items.explore.lkml"

기본 파생 테이블 열 정의

이전 예시에 표시된 것처럼 column을 사용하여 파생 테이블의 출력 열을 지정합니다.

열 이름 지정

user_id 열의 경우 열 이름이 원래 탐색에서 지정된 필드 이름과 일치합니다.

출력 테이블에 원래 탐색의 필드 이름과 다른 열 이름이 필요한 경우가 많습니다. 앞의 예시에서는 order_items 탐색을 사용하여 사용자가 평생 가치 계산을 생성했습니다. 출력 테이블에서 total_revenue는 실제로 고객의 lifetime_customer_value입니다.

column 선언은 입력 필드와 다른 출력 이름 선언을 지원합니다. 예를 들어 다음 코드는 Looker에 'order_items.total_revenue 필드에서 lifetime_value라는 출력 열을 만들도록' 지시합니다.

column: lifetime_value {
  field: order_items.total_revenue
}

암시된 열 이름

field 매개변수가 열 선언에서 생략되면 <explore_name>.<field_name>으로 간주됩니다. 예를 들어 explore_source: order_items을 지정한 경우

column: user_id {
  field: order_items.user_id
}

은 다음과 동일합니다.

column: user_id {}

계산된 값의 파생 열 만들기

derived_column 매개변수를 추가하여 explore_source 매개변수의 탐색에 없는 열을 지정할 수 있습니다. 각 derived_column 매개변수에는 값을 구성하는 방법을 지정하는 sql 매개변수가 있습니다.

sql 계산은 column 매개변수를 사용하여 지정한 열을 사용할 수 있습니다. 파생 열은 집계 함수를 포함할 수 없지만 테이블의 단일 행에서 수행할 수 있는 계산은 포함할 수 있습니다.

다음 예시에서는 이전 예시와 동일한 파생 테이블을 생성하지만 기본 파생 테이블의 lifetime_customer_valuelifetime_number_of_orders 열에서 계산되는 계산된 average_customer_order 열을 추가한다는 점이 다릅니다.

view: user_order_facts {
  derived_table: {
    explore_source: order_items {
      column: user_id {
        field: order_items.user_id
      }
      column: lifetime_number_of_orders {
        field: order_items.order_count
      }
      column: lifetime_customer_value {
        field: order_items.total_revenue
      }
      derived_column: average_customer_order {
        sql:  lifetime_customer_value / lifetime_number_of_orders ;;
      }
    }
  }
  # Define the view's fields as desired
  dimension: user_id {
    hidden: yes
  }
  dimension: lifetime_number_of_orders {
    type: number
  }
  dimension: lifetime_customer_value {
    type: number
  }
  dimension: average_customer_order {
    type: number
  }
}

SQL 윈도우 함수 사용

일부 데이터베이스 언어는 특히 시퀀스 넘버, 기본 키, 누적 합계, 기타 유용한 다중 행 계산을 만들기 위한 윈도우 함수를 지원합니다. 기본 쿼리가 실행되면 derived_column 선언이 별도의 전달에서 실행됩니다.

데이터베이스 언어가 윈도우 함수를 지원하는 경우 기본 파생 테이블에서 사용할 수 있습니다. 원하는 윈도우 함수가 포함된 sql 매개변수를 사용하여 derived_column 매개변수를 만듭니다. 값을 참조할 때는 기본 파생 테이블에 정의된 열 이름을 사용해야 합니다.

다음 예시에서는 user_id, order_id, created_time 열이 포함된 기본 파생 테이블을 만듭니다. 그런 다음 SQL ROW_NUMBER() 윈도우 함수가 있는 파생 열을 사용하여 고객 주문의 시퀀스 넘버가 포함된 열을 계산합니다.

view: user_order_sequences {
  derived_table: {
    explore_source: order_items {
      column: user_id {
        field: order_items.user_id
      }
      column: order_id {
        field: order_items.order_id
      }
      column: created_time {
        field: order_items.created_time
      }
      derived_column: user_sequence {
        sql: ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY created_time) ;;
      }
    }
  }
  dimension: order_id {
    hidden: yes
  }
  dimension: user_sequence {
    type: number
  }
}

기본 파생 테이블에 필터 추가

지난 90일 동안의 고객 가치에 대한 파생 테이블을 빌드한다고 가정해 보겠습니다. 이전 예시와 동일한 계산이 필요하지만 지난 90일 동안의 구매만 포함하려고 합니다.

derived_table에 지난 90일 동안의 거래를 필터링하는 필터를 추가하기만 하면 됩니다. 파생된 테이블의 filters 매개변수는 필터링된 측정을 만드는 데 사용한 문법과 동일한 문법을 사용합니다.

view: user_90_day_facts {
  derived_table: {
    explore_source: order_items {
      column: user_id {
        field: order_items.user_id
      }
      column: number_of_orders_90_day {
        field: order_items.order_count
      }
      column: customer_value_90_day {
        field: order_items.total_revenue
      }
      filters: [order_items.created_date: "90 days"]
    }
  }
  # Add define view's fields as desired
  dimension: user_id {
    hidden: yes
  }
  dimension: number_of_orders_90_day {
    type: number
  }
  dimension: customer_value_90_day {
    type: number
  }
}

Looker가 파생 테이블의 SQL을 작성할 때 필터가 WHERE 절에 추가됩니다.

또한 기본 파생 테이블과 함께 explore_sourcedev_filters 하위 매개변수를 사용할 수 있습니다. dev_filters 매개변수를 사용하면 Looker가 파생 테이블의 개발 버전에만 적용하는 필터를 지정할 수 있습니다. 즉, 각 변경 후 전체 테이블이 빌드될 때까지 기다리지 않고 더 작은 필터링된 테이블 버전을 빌드하여 반복 및 테스트할 수 있습니다.

dev_filters 매개변수는 모든 매개변수와 테이블의 개발 버전에 적용되도록 filters 매개변수와 함께 작동합니다. dev_filtersfilters가 둘 다 동일한 열에 필터를 지정하면 dev_filters가 테이블의 개발 버전에 우선합니다.

자세한 내용은 개발 모드에서 더 빠르게 작업을 참조하세요.

템플릿 필터 사용

bind_filters을 사용하여 템플릿 필터를 포함할 수 있습니다.

bind_filters: {
  to_field: users.created_date
  from_field: filtered_lookml_dt.filter_date
}

이는 기본적으로 sql 블록에서 다음 코드를 사용하는 것과 동일합니다.

{% condition filtered_lookml_dt.filter_date %} users.created_date {% endcondition %}

to_field는 필터가 적용되는 필드입니다. to_field는 기본 explore_source의 필드여야 합니다.

from_field는 런타임에 필터가 있는 경우 필터를 가져올 필드를 지정합니다.

앞의 bind_filters 예시에서 Looker는 filtered_lookml_dt.filter_date 필드에 적용된 필터를 사용하고 users.created_date 필드에 필터를 적용합니다.

explore_sourcebind_all_filters 하위 매개변수를 사용하여 탐색에서 모든 런타임 필터를 기본 파생 테이블 서브 쿼리로 전달할 수도 있습니다. 자세한 내용은 explore_source 매개변수 문서 페이지를 참조하세요.

기본 파생 테이블 정렬 및 제한

원하는 경우 파생 테이블을 정렬하고 제한할 수도 있습니다.

sorts: [order_items.count: desc]
limit: 10

탐색 분석에서 행을 기본 정렬과 다른 순서로 표시할 수 있다는 점을 기억하세요.

기본 파생 테이블을 다른 시간대로 변환

timezone 하위 매개변수를 사용하여 기본 파생 테이블의 시간대를 지정할 수 있습니다.

timezone: "America/Los_Angeles"

timezone 하위 매개변수를 사용하면 기본 파생 테이블의 모든 시간 기반 데이터가 지정한 시간대로 변환됩니다. 지원되는 시간대 목록은 timezone 문서 페이지를 참조하세요.

기본 파생 테이블 정의에 시간대를 지정하지 않으면 기본 파생 테이블은 시간 기반 데이터에서 시간대를 변환하지 않으며, 대신 시간 기반 데이터가 데이터베이스 시간대로 기본 사용됩니다.

기본 파생 테이블이 영구가 아닌 경우 시간대 값을 "query_timezone"으로 설정하여 현재 실행 중인 쿼리의 시간대를 자동으로 사용할 수 있습니다.