파생 테이블은 파생 테이블이 데이터베이스의 실제 테이블인 것처럼 결과가 사용되는 쿼리입니다. 기본 파생 테이블은 LookML 용어를 사용하여 정의하는 쿼리를 기반으로 합니다. 이는 SQL 용어로 정의하는 쿼리를 기반으로 하는 SQL 기반 파생 테이블과는 다릅니다. SQL 기반 파생 테이블과 달리 기본 파생 테이블은 데이터를 모델링할 때 훨씬 쉽게 읽고 이해할 수 있습니다. 자세한 내용은 Looker의 파생 테이블 문서 페이지의 기본 파생 테이블 및 SQL 기반 파생 테이블 섹션을 참조하세요.
기본 파생 테이블과 SQL 기반 파생 테이블 모두 LookML에서 뷰 수준의 derived_table
파라미터를 사용하여 정의됩니다. 하지만 기본 파생 테이블에서는 SQL 쿼리를 만들 필요가 없습니다. 대신 explore_source
매개변수를 사용하여 파생 테이블, 원하는 열, 기타 원하는 특성을 기반으로 하는 탐색을 지정합니다.
SQL Runner를 사용하여 파생 테이블 만들기 문서 페이지에 설명된 대로 Looker가 SQL Runner 쿼리에서 파생 테이블 LookML을 만들도록 할 수도 있습니다.
탐색을 사용하여 기본 파생 테이블 정의 시작하기
탐색부터 시작하여 Looker는 파생된 테이블의 전체 또는 대부분에 대해 LookML을 생성할 수 있습니다. 탐색을 만들고 파생된 테이블에 포함할 모든 필드를 선택하면 됩니다. 그런 다음 기본 파생 테이블 LookML을 생성하려면 다음 단계를 따르세요.
작업 탐색 톱니바퀴 메뉴를 선택하고 LookML 가져오기를 선택합니다.
파생 테이블 탭을 클릭하여 탐색의 기본 파생 테이블을 만드는 LookML을 확인합니다.
LookML을 복사합니다.
이제 생성된 LookML을 복사했으므로 뷰 파일에 붙여넣습니다.
Looker IDE에서 프로젝트 파일 목록 상단에 있는 +를 클릭하고 뷰 만들기를 선택합니다. 또는 폴더 메뉴를 클릭하고 메뉴에서 뷰 만들기를 선택하여 폴더 내에 파일을 만들 수 있습니다.
뷰 이름을 의미 있는 이름으로 설정합니다.
원하는 경우 열 이름을 변경하고, 파생 열을 지정하고, 필터를 추가합니다.
탐색에서
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
파라미터를 사용하여 Explore의 정의가 포함된 파일을 가리킬 필요는 없습니다. include
문이 없으면 Looker IDE에서 기본 파생 테이블을 빌드할 때 필드 이름을 자동 추천하지 않거나 필드 참조를 확인하지 않습니다. 대신 LookML 검사기를 사용하여 기본 파생 테이블에서 참조하는 필드를 확인할 수 있습니다.
하지만 Looker IDE에서 자동 제안 및 즉시 필드 확인을 사용 설정하거나 동일 이름 또는 순환 참조 가능성이 있는 탐색이 여러 개 있는 복잡한 LookML 프로젝트가 있는 경우 include
매개변수를 사용하여 탐색 정의 위치를 지정할 수 있습니다.
Explore는 일반적으로 모델 파일 내에서 정의되지만 기본 파생 테이블의 경우 Explore에 대해 별도의 파일을 만드는 것이 더 깔끔합니다. 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_value
및 lifetime_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_source
의 dev_filters
하위 매개변수를 사용할 수 있습니다. dev_filters
매개변수를 사용하면 Looker가 파생 테이블의 개발 버전에만 적용하는 필터를 지정할 수 있습니다. 즉, 각 변경 후 전체 테이블이 빌드될 때까지 기다리지 않고 더 작은 필터링된 테이블 버전을 빌드하여 반복 및 테스트할 수 있습니다.
dev_filters
매개변수는 모든 매개변수와 테이블의 개발 버전에 적용되도록 filters
매개변수와 함께 작동합니다. dev_filters
및 filters
가 둘 다 동일한 열에 필터를 지정하면 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_source
의 bind_all_filters
하위 매개변수를 사용하여 탐색에서 모든 런타임 필터를 기본 파생 테이블 서브 쿼리로 전달할 수도 있습니다. 자세한 내용은 explore_source
파라미터 문서 페이지를 참조하세요.
기본 파생 테이블 정렬 및 제한
원하는 경우 파생된 테이블을 정렬하고 제한할 수도 있습니다.
sorts: [order_items.count: desc]
limit: 10
탐색 분석에서 행을 기본 정렬과 다른 순서로 표시할 수 있다는 점을 기억하세요.
기본 파생 테이블을 다른 시간대로 변환
timezone
하위 파라미터를 사용하여 기본 파생 테이블의 시간대를 지정할 수 있습니다.
timezone: "America/Los_Angeles"
timezone
하위 파라미터를 사용하면 기본 파생 테이블의 모든 시간 기반 데이터가 지정된 시간대로 변환됩니다. 지원되는 시간대 목록은 timezone
값 문서 페이지를 참조하세요.
기본 파생 테이블 정의에 시간대를 지정하지 않으면 기본 파생 테이블은 시간 기반 데이터에서 시간대를 변환하지 않으며, 대신 시간 기반 데이터가 데이터베이스 시간대로 기본 사용됩니다.
기본 파생 테이블이 영구가 아닌 경우 시간대 값을 "query_timezone"
으로 설정하여 현재 실행 중인 쿼리의 시간대를 자동으로 사용할 수 있습니다.