네이티브 파생 테이블 만들기

파생 테이블은 결과가 데이터베이스의 실제 테이블인 것처럼 사용되는 쿼리입니다. 네이티브 파생 테이블은 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에서 프로젝트 파일 목록 상단의 +를 클릭하고 Create View를 선택합니다. 또는 폴더 메뉴를 클릭하고 메뉴에서 보기 만들기를 선택하여 폴더 안에 파일을 만들 수 있습니다.

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

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

탐색에서 type: count 측정값을 사용하면 시각화에서 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라는 세 개의 열이 포함된 파생 테이블을 생성합니다. 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 매개변수를 사용하여 탐색을 가리키고 네이티브 파생 테이블에서 원하는 열과 기타 원하는 특성을 정의합니다. 네이티브 파생 테이블 내의 Explore를 가리키고 있으므로 Explore의 정의가 포함된 파일도 포함해야 합니다. 탐색은 일반적으로 모델 파일 내에서 정의되지만 네이티브 파생 테이블의 경우 파일 탐색 만들기 문서에 설명된 대로 .explore.lkml 파일 확장자를 사용하여 별도의 탐색 파일을 만드는 것이 더 깔끔합니다. 이렇게 하면 네이티브 파생 테이블 뷰 파일에 전체 모델 파일이 아닌 단일 탐색 파일을 포함할 수 있습니다. 이 경우 다음 사항이 적용됩니다.

  • 네이티브 파생 테이블의 뷰 파일에는 탐색 파일이 포함되어야 합니다. 예를 들면 다음과 같습니다.
    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 선언은 입력란과 다른 출력 이름 선언을 지원합니다. 예를 들어 아래 코드는 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의 모든 런타임 필터를 네이티브 파생 테이블 서브 쿼리로 전달할 수도 있습니다. 자세한 내용은 explore_source 매개변수 문서 페이지를 참고하세요.

네이티브 파생 테이블 정렬 및 제한

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

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

탐색은 기본 정렬과 다른 순서로 행을 표시할 수 있습니다.

네이티브 파생 테이블을 다른 시간대로 변환

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

timezone: "America/Los_Angeles"

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

네이티브 파생 테이블 정의에 시간대를 지정하지 않으면 네이티브 파생 테이블은 시간 기반 데이터에 대해 시간대를 변환하지 않으며 대신 시간 기반 데이터가 데이터베이스 시간대로 기본 설정됩니다.

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