메트릭 뷰는 데이터에 대한 의미 체계 계층을 만들어 테이블 및 뷰를 표준화된 비즈니스 메트릭으로 변환합니다. 측정할 내용, 집계 방법 및 분할 방법을 정의합니다. 따라서 조직 전체의 모든 사용자가 동일한 KPI에 대해 동일한 값을 보고하므로 일관되지 않은 보고가 제거되고 모든 필드에서 유연한 분석이 가능합니다.
정의한 핵심 구성 요소는 원본, 조인, 필터, 필드 및 측정값입니다.
조인, 필드, 측정값 및 에이전트 메타데이터가 포함된 전체 예제는 자습서: 조인 및 데이터 모델링을 사용하여 메트릭 뷰 빌드를 참조하세요.
핵심 구성 요소
메트릭 뷰는 다음 요소로 구성됩니다.
| Component | Description | Example |
|---|---|---|
| Source | 데이터를 포함하는 기본 테이블, 뷰 또는 SQL 쿼리입니다. | samples.tpch.orders |
| 조인 | 데이터를 보강하기 위한 테이블, 뷰 및 메트릭 뷰 간의 관계입니다. |
orders 테이블과 customers 테이블을 customer_key로 조인하십시오. |
| 필터 | 범위를 정의하기 위해 원본 데이터에 적용되는 조건입니다. |
|
| Fields | 메트릭을 그룹화, 필터링 및 집계하는 데 사용되는 열입니다. 범주 열 및 집계되지 않은 숫자 열을 포함합니다. 차원이라고도 합니다. | 제품 범주, 주문 월, 단가 |
| 측정값 | 메트릭을 생성하는 열 집계입니다. |
COUNT(o_orderkey) 주문 수로, SUM(o_totalprice) 총 수익으로 |
원본 정의
테이블과 유사한 자산 또는 SQL 쿼리를 메트릭 뷰의 원본으로 사용할 수 있습니다. 참조된 자산에 대한 최소 권한이 있어야 합니다 SELECT .
테이블과 유사한 자산은 테이블 형식 스키마를 노출하고 테이블, 뷰, 구체화된 뷰, 스트리밍 테이블, 외장 테이블, 시스템 테이블 및 메트릭 뷰를 비롯한 쿼리를 지원하는 SELECT Unity 카탈로그 개체입니다.
테이블과 유사한 자산을 원본으로 사용
테이블과 유사한 자산을 원본으로 사용하려면 정규화된 이름을 지정합니다. 예: samples.tpch.orders.
메트릭 뷰를 원본으로 사용
기존 메트릭 뷰를 새 메트릭 뷰의 원본으로 사용할 수 있습니다.
version: 1.1
source: views.examples.source_metric_view
fields:
- name: Order month
expr: '`Order Month`'
measures:
- name: Latest order month
expr: MAX(`Order month`)
- name: Latest order year
expr: "DATE_TRUNC('year', MEASURE(`Latest order month`))"
메트릭 뷰를 원본으로 사용하는 경우 필드 및 측정값을 참조하는 데 동일한 작성 규칙이 적용됩니다. 컴포저빌리티를 참조하세요.
SQL 쿼리를 원본으로 사용
SQL 쿼리를 사용하려면 YAML에서 직접 쿼리 텍스트를 작성합니다.
version: 1.1
source: SELECT * FROM samples.tpch.orders o LEFT JOIN samples.tpch.customer c ON o.o_custkey
= c.c_custkey
fields:
- name: Order key
expr: o_orderkey
measures:
- name: Order Count
expr: COUNT(o_orderkey)
메모
절이 있는 원본 JOIN 으로 SQL 쿼리를 사용하는 경우 기본 테이블에 기본 및 외래 키 제약 조건을 설정하고 최적의 쿼리 성능을 위해 이 옵션을 사용합니다 RELY .
기본 키, 외래 키 및 고유 제약 조건 선언 및 기본 키 및 고유 제약 조건을 사용한 쿼리 최적화를 참조하세요.
소스에서 배열과 맵을 해석합니다
필드, 측도, 조인은 모두 평평하고 스칼라 컬럼에서 동작합니다. 소스 데이터에 ARRAYMAP 열이 있거나 타입이 있다면, 쿼리에서 source 평면 열로 해결한 후 메트릭 뷰의 다른 곳에서 참조하세요. 배열 요소당 한 행을 원할지, 소스 행당 단일 값을 원하는지에 따라 두 가지 변환 전략이 있습니다. 배열이 최상위 소스에 있든, 조인하는 테이블에 있든 두 가지 모두 적용됩니다. 변환 함수 전체 집합은 복잡한 데이터 타입 변환(Transform complex data types )을 참조하세요.
카탈로그 내 samples 어떤 데이터셋에도 배열 열이 없기 때문에, 이 섹션의 예시들은 구조체 배열을 가진 orders 뷰를 사용합니다line_items. 다음 예제를 사용하여 배열인 필드가 있는 뷰를 만드세요. 작성하려는 카탈로그와 스키마로 교체 catalog.schema 하세요. 그 스키마에서 객체를 생성하려면 권한이 필요합니다.
CREATE OR REPLACE VIEW catalog.schema.orders AS
SELECT
o.o_orderkey,
o.o_custkey,
o.o_orderdate,
o.o_orderstatus,
collect_list(named_struct(
'product_id', l.l_partkey,
'quantity', cast(l.l_quantity as int)
)) AS line_items
FROM samples.tpch.orders o
JOIN samples.tpch.lineitem l ON o.o_orderkey = l.l_orderkey
GROUP BY o.o_orderkey, o.o_custkey, o.o_orderdate, o.o_orderstatus;
배열을 줄로 평평하게 만듭니다
각 배열 요소를 별도의 행으로 분석하려면, 쿼리에서 explode() 배열을 언팩하는 데 사용 source 하세요. 각 요소는 별도의 행이 되며, 소스 행의 다른 열들이 각 요소마다 반복됩니다. 맵 이나 배열에서 중첩된 요소를 폭파하기를 참조하세요.
다음 예시는 배열을 line_items 언팩하여 각 항목이 행이 되도록 합니다:
version: 1.1
source: |
SELECT o_orderkey, o_custkey, item.product_id, item.quantity
FROM catalog.schema.orders
LATERAL VIEW explode(line_items) AS item
fields:
- name: Product
expr: product_id
measures:
- name: Total quantity
expr: SUM(quantity)
- name: Line item count
expr: COUNT(1)
배열을 source 폭발시키면 소스 행이 곱해지므로, 같은 COUNT(1) 집계는 원래 행이 아니라 배열 요소를 세는 것입니다. 팬아웃 없이 원래 행을 측정하려면 폭발된 테이블을 조인으로 one_to_many 모델링하세요.
일대다 조인을 참조하세요.
배열을 하나의 값으로 집계합니다
열 수를 변경하지 않고 소스 행당 하나의 값으로 배열을 축소하려면, 쿼리에 source , aggregate(), 또는 array_size()와 같은 reduce()스칼라 배열 함수를 적용하세요. 각 소스 행은 자신의 그레인을 유지하며, 계산된 열은 필드와 측도에 제공됩니다.
다음 예시는 주문별 항목 수와 배열의 line_items 총 수량을 계산합니다:
version: 1.1
source: |
SELECT o_orderkey, o_custkey,
array_size(line_items) AS item_count,
aggregate(line_items, 0, (acc, x) -> acc + x.quantity) AS total_quantity
FROM catalog.schema.orders
measures:
- name: Total quantity
expr: SUM(total_quantity)
- name: Average items per order
expr: AVG(item_count)
소스 쿼리가 메트릭 뷰가 배열을 처리하기 전에 배열을 줄이기 때문에, 소스는 명령당 한 행을 유지하고 평소처럼 순서 간 집계를 측정합니다.
조인된 테이블에서 배열을 해결하기
같은 규칙은 배열이 최상위 소스가 아니라 가입하려는 테이블에 있을 때도 적용됩니다. 조인은 평탄한 열에 대해 작동하므로, 조인 전에 조인된 테이블의 하위 source 쿼리에서 배열을 해결하세요. 조인 source 을 SQL 쿼리로 작성해 배열을 평탄화하거나 집계한 후, 결과 컬럼에 조인하세요.
미터법 뷰에서의 조인(Joins)을 참조하세요.
다음 예시는 소스를 사용하여 customer 뷰orders를 cardinality: one_to_many 와 결합합니다. 조인 source 은 각 주문의 배열을 line_items 조인 전에 스칼라 total_quantity 로 집계하여, 메트릭 뷰가 고객 행 중복 없이 고객별 배열을 합산할 수 있습니다:
version: 1.1
source: samples.tpch.customer
joins:
- name: orders
source: |
SELECT o_orderkey, o_custkey,
aggregate(line_items, 0, (acc, x) -> acc + x.quantity) AS total_quantity
FROM catalog.schema.orders
on: orders.o_custkey = source.c_custkey
cardinality: one_to_many
fields:
- name: Customer name
expr: c_name
measures:
- name: Total quantity
expr: SUM(orders.total_quantity)
- name: Order count
expr: COUNT(orders.o_orderkey)
대신 각 배열 요소를 조인 테이블 내 별도의 행으로 취급하려면, 조인 explode() 에 있는 배 source 열도 같은 방식으로 평탄화합니다. 배 열을 행으로 평탄화하기를 참조하세요.
필드
차원이라고도 하는 필드는 쿼리 시 SELECT, WHERE, GROUP BY 절에서 사용할 수 있는 메트릭 뷰의 열입니다. 필드는 지역 또는 상태와 같은 범주 열이거나 쿼리 시간에 집계할 수 있는 가격 또는 수량과 같은 집계되지 않은 숫자 열일 수 있습니다. 각 필드 식은 스칼라 값을 반환해야 합니다. 메트릭 뷰의 앞부분에서 정의된 원본 데이터 또는 필드의 열을 참조할 수 있습니다. 각 필드는 다음 두 가지 구성 요소로 구성됩니다.
-
name: 열의 별칭 -
expr: 메트릭 뷰에서 원본 데이터 또는 이전에 정의된 필드를 참조하는 SQL 식입니다.
Warning
문자열형 메트릭 뷰 필드는 소스 열이 STRING이든 CHAR이든 관계없이 항상 VARCHAR입니다.
CHAR(n) 공간 패딩이 손실되므로 비교는 다른 결과를 반환할 수 있습니다. 예를 들어, column = 'COLLEGE'는 소스 테이블(공백으로 패딩됨)의 CHAR(10) 값과는 일치하지만 메트릭 뷰 필드와는 일치하지 않습니다.
조치
측정값은 미리 결정된 집계 수준 없이 결과를 생성하는 식입니다. 집계 함수를 사용하여 표현해야 합니다. 쿼리에서 측정값을 참조하려면 함수를 MEASURE 사용합니다. 측정값은 원본 데이터, 이전 정의 필드 또는 이전에 정의된 측정값의 기본 열을 참조할 수 있습니다. 각 측정값은 다음 구성 요소로 구성됩니다.
-
name: 측정값의 별칭 -
expr: SQL 집계 함수를 포함할 수 있는 집계 SQL 식
다음 예제에서는 주문 및 수익 데이터를 분석하기 위한 일반적인 측정 패턴을 보여 줍니다. 이러한 예제에서는 주문 가격(), 고객 식별자(), 주문 키o_totalprice(), 주문 날짜o_custkey() 및 우선 순위 수준o_orderkey(o_orderdateo_orderpriority)을 포함한 판매 트랜잭션 데이터가 포함된 TPC-H 주문 테이블을 사용합니다.
measures:
# Simple count measure
- name: Order Count
expr: COUNT(1)
# Sum aggregation measure
- name: Total Revenue
expr: SUM(o_totalprice)
# Distinct count measure
- name: Unique Customers
expr: COUNT(DISTINCT o_custkey)
# Calculated measure combining multiple aggregations
- name: Average Order Value
expr: SUM(o_totalprice) / COUNT(DISTINCT o_orderkey)
# Filtered measure with WHERE condition
- name: High Priority Order Revenue
expr: SUM(o_totalprice) FILTER (WHERE o_orderpriority = '1-URGENT')
# Measure using a field
- name: Average Revenue per Month
expr: SUM(o_totalprice) / COUNT(DISTINCT DATE_TRUNC('MONTH', o_orderdate))
집계 함수 목록은 참조하세요.
필터 적용
필터는 메트릭 뷰를 참조하는 모든 쿼리에 적용됩니다. UI에서 필터를 정의하려면 3단계: 필터 정의를 참조하세요.
YAML 정의에서 필터를 정의하려면 부울 식을 작성합니다. 다음 예제에서는 일반적인 필터 패턴을 보여 줍니다.
# Single condition
filter: o_orderdate > '2024-01-01'
# Multiple conditions
filter: o_orderdate > '2024-01-01' AND o_orderstatus = 'F'
# IN clause
filter: o_orderstatus IN ('F', 'P') AND o_orderdate >= '2024-01-01'
조인 작업
메트릭 뷰는 조인을 지원하여 관련 테이블의 특성을 사용하여 원본 데이터를 보강합니다. 별모양 스키마(차원 테이블에 조인된 팩트 테이블), 눈송이 스키마(다단계 차원 조인) 및 일 대 다 관계(차원 원본에서 팩트 확장)를 모델링할 수 있습니다. 조인 유형, 카디널리티, 스키마 패턴 및 제한 사항에 대한 자세한 내용은 메트릭 뷰의 조인을 참조하세요.
UI에서 조인을 정의하려면 2단계: 조인 추가를 참조하세요. YAML 정의에서 조인을 정의하려면 다음 섹션의 패턴을 사용합니다.
메모
조인된 테이블은 열을 포함 ARRAY 하거나 MAP 타이핑할 수 없습니다. 배열을 해석하거나 결합 전에 평면 열로 매핑하려면 소스 내 배열 및 맵 해석을 참조하세요.
모델 스타 스키마
별표 스키마에서 source는 사실 테이블이며, LEFT OUTER JOIN을(를) 사용하여 하나 이상의 차원 테이블과 조인합니다. 메트릭 뷰는 선택한 필드 및 측정값에 따라 특정 쿼리에 필요한 팩트 및 차원 테이블을 조인합니다.
on 절(부울 식) 또는 using 절(공유 열 이름)을 사용하여 조인 열을 지정합니다. 조인은 다대일 관계를 따라야 합니다. 다대다의 경우 엔진은 조인된 차원 테이블에서 일치하는 첫 번째 행을 선택합니다.
다음 예제에서는 (팩트 테이블)을 orders (차원 테이블)에 customer 조인하고 고객 특성을 필드로 노출합니다. 설정은 rely.at_most_one_match: true 조인이 다대일(각 주문에는 정확히 하나의 고객이 있음)임을 선언하며, 이를 통해 엔진은 조인된 테이블의 필드를 필터링하는 쿼리를 최적화할 수 있습니다.
Warning
관계가 다대일인 경우에만 at_most_one_match: true를 설정하세요. 이 속성은 런타임에 유효성이 검사되지 않습니다. 조인이 팬아웃을 생성하는 경우 측정값은 잘못된 결과를 반환합니다.
rely로 조인 최적화하기를 참조하세요.
version: 1.1
source: samples.tpch.orders
joins:
- name: customer
source: samples.tpch.customer
on: source.o_custkey = customer.c_custkey
fields:
- name: Customer name
expr: customer.c_name
measures:
- name: Total revenue
expr: SUM(o_totalprice)
YAML 구문 및 서식 지정
메트릭 뷰 정의는 표준 YAML 표기법 구문을 따릅니다. 필요한 구문 및 서식에 대한 메트릭 뷰 YAML 구문 참조 를 참조하세요.
모범 사례
메트릭 뷰를 모델링할 때 다음 지침을 사용합니다.
-
원자 모델 측정값: 가장 간단한 측정값을 정의하면서 시작합니다(예:
SUM(revenue),COUNT(DISTINCT customer_id)). 작성 가능성을 이용하여 복합 측정값을 구성합니다. -
필드 값 표준화: 변환(예:
CASE문)을 사용하여 데이터베이스 코드를 명확한 비즈니스 이름으로 변환합니다(예: 주문 상태 'O'를 '열기'로, 'F'를 'Fulfilled'로 변환). - 필터를 사용하여 범위 정의: 메트릭 뷰에 완료된 주문만 포함해야 하는 경우 사용자가 불완전한 데이터를 실수로 포함할 수 없도록 메트릭 뷰에서 해당 필터를 정의합니다.
-
명확한 이름 지정 사용: 메트릭 이름은 비즈니스 사용자가 인식할 수 있어야 합니다(예: 대신
cltv_agg_measure"고객 수명 값"). - 별도의 시간 필드: 세부 수준 및 추세 분석을 모두 사용할 수 있도록 세분화된 시간 필드(예: "주문 날짜") 및 잘린 시간 필드(예: "주문 월" 또는 "주문 주")를 포함합니다.