다음을 통해 공유


메트릭 뷰에 대한 구체화

중요합니다

이 기능은 실험적 기능입니다.

이 문서에서는 메트릭 뷰에 구체화를 사용하여 쿼리 성능을 가속화하는 방법을 설명합니다.

메트릭 뷰의 구체화는 구체화된 뷰를 사용하여 쿼리를 가속화합니다. Lakeflow Spark 선언적 파이프라인은 지정된 메트릭 뷰에 대해 사용자 정의 구체화된 뷰를 오케스트레이션합니다. 쿼리 시 쿼리 최적화 프로그램은 자동 집계 인식 쿼리 일치(쿼리 다시 쓰기라고도 함)를 사용하여 메트릭 뷰의 사용자 쿼리를 가장 구체화된 뷰로 지능적으로 라우팅합니다.

이 방법은 사전 계산 및 자동 증분 업데이트의 이점을 제공하므로 다양한 성능 목표를 쿼리하기 위해 집계 테이블 또는 구체화된 뷰를 결정할 필요가 없으며 별도의 프로덕션 파이프라인을 관리할 필요가 없습니다.

개요

다음 다이어그램에서는 메트릭 뷰가 정의 및 쿼리 실행을 처리하는 방법을 보여 줍니다.

메트릭 뷰 구체화 정의 및 쿼리 실행

정의 단계

구체화를 사용하여 메트릭 뷰를 정의할 때, CREATE METRIC VIEW 또는 ALTER METRIC VIEW이 차원, 측정값 및 새로 고침 일정을 지정합니다. Databricks는 구체화된 뷰를 유지하는 관리되는 파이프라인 을 만듭니다.

쿼리 실행

SELECT ... FROM <metric_view>를 실행할 때, 쿼리 최적화기는 집계 인식 쿼리 다시 쓰기를 사용하여 성능을 최적화합니다.

  • 빠른 경로: 해당하는 경우 미리 계산된 구체화된 뷰에서 읽습니다.
  • 대체 경로: 데이터 구체화를 사용할 수 없을 때 원본 데이터를 직접 읽습니다.

쿼리 최적화 프로그램은 구체화된 데이터와 원본 데이터 중에서 선택하여 성능과 새로 고침의 균형을 자동으로 조정합니다. 어떤 경로가 사용되든 관계없이 결과를 투명하게 받습니다.

요구 사항

메트릭 뷰에 구체화를 사용하려면 다음을 수행합니다.

  • 작업 영역에는 서버리스 컴퓨팅을 사용하도록 설정해야 합니다. Lakeflow Spark 선언적 파이프라인을 실행하는 데 필요합니다.
  • Databricks Runtime 17.2 이상이어야 합니다.

구성 참조

구체화와 관련된 모든 정보는 메트릭 뷰 YAML 정의에 명명된 materialization 최상위 필드에 정의됩니다.

비고

이 기능이 배포되면 물리화가 포함된 버전 1.1 메트릭 뷰에서 기본 파이프라인에 다음과 같은 오류가 발생할 수 있습니다.

[METRIC_VIEW_INVALID_VIEW_DEFINITION] The metric view definition is invalid. Reason: Invalid YAML version: 1.1.

이 경우 버전 0.1을 대신 사용합니다. 버전 0.1은 버전 1.1에서 사용할 수 있는 일부 기능을 지원하지 않습니다. 메트릭 뷰에 대한 구체화는 향후 몇 주 내에 모든 작업 영역에서 사용할 수 있습니다.

필드에 materialization 는 다음과 같은 필수 필드가 포함됩니다.

  • schedule: 구체화된 뷰의 schedule 절과 동일한 구문을 지원합니다.
  • mode: relaxed로 설정해야 합니다.
  • materialized_views: 구체화할 구체화된 뷰 목록입니다.
    • name: 구체화의 이름입니다.
    • 차원: 구체화할 차원 목록입니다. 차원 이름에 대한 직접 참조만 허용됩니다. 식은 지원되지 않습니다.
    • measures: 구체화할 측정값 목록입니다. 측정값 이름에 대한 직접 참조만 허용되며, 식은 지원되지 않습니다.
    • 형식: 구체화된 뷰가 집계되는지 여부를 지정합니다. 두 가지 가능한 값을 허용합니다. aggregatedunaggregated
      • typeaggregated이라면, 하나 이상의 차원 또는 측정값이 있어야 합니다.
      • 이 경우 typeunaggregated라면, 차원이나 측정값을 정의하지 않아야 합니다.

비고

메트 TRIGGER ON UPDATE 릭 뷰의 구체화에는 절이 지원되지 않습니다.

예제 정의

version: 0.1

source: prod.operations.orders_enriched_view

filter: revenue > 0

dimensions:
  - name: category
    expr: substring(category, 5)

  - name: color
    expr: color

measures:
  - name: total_revenue
    expr: SUM(revenue)

  - name: number_of_suppliers
    expr: COUNT(DISTINCT supplier_id)

materialization:
  schedule: every 6 hours
  mode: relaxed

  materialized_views:
    - name: baseline
      type: unaggregated

    - name: revenue_breakdown
      type: aggregated
      dimensions:
        - category
        - color
      measures:
        - total_revenue

    - name: suppliers_by_category
      type: aggregated
      dimensions:
        - category
      measures:
        - number_of_suppliers

Mode

relaxed 모드에서는 자동 쿼리 다시 쓰기가 후보 구체화 뷰가 쿼리를 처리하는 데 필요한 차원과 측정값을 갖추고 있는지 만 확인합니다.

즉, 여러 검사를 건너뜁습니다.

  • 구체화된 뷰가 최신 상태인지 여부는 검사되지 않습니다.
  • 일치하는 SQL 설정(예 ANSI_MODE : 또는 TIMEZONE)이 있는지 여부는 검사되지 않습니다.
  • 구체화된 뷰가 결정적 결과를 반환하는지 여부는 검사되지 않습니다.

쿼리에 다음 조건이 포함된 경우 쿼리 다시 쓰기가 발생하지 않고 쿼리가 원본 테이블로 돌아갑니다.

  • 물질화된 뷰의 행 수준 보안(RLS) 또는 열 수준 마스킹(CLM)입니다.
  • 구체화된 뷰와 같은 current_timestamp() 비결정적 함수입니다. 메트릭 뷰 정의 또는 메트릭 뷰에서 사용하는 원본 테이블에 표시될 수 있습니다.

비고

실험적 릴리스 기간 동안 relaxed 유일하게 지원되는 모드입니다. 이러한 검사가 실패하면 쿼리는 원본 데이터로 돌아갑니다.

메트릭 뷰에 대한 구체화 형식

다음 섹션에서는 메트릭 뷰에 사용할 수 있는 구체화된 뷰의 유형을 설명합니다.

집계된 형식

이 유형은 타겟 범위를 위해 지정된 측정값 및 차원 조합에 대한 집계를 미리 계산합니다.

이는 특정 일반적인 집계 쿼리 패턴 또는 위젯을 대상으로 지정하는 데 유용합니다. Databricks는 머티리얼라이즈드 뷰 구성에서 잠재적 필터 열을 차원으로 포함하는 것을 권장합니다. 잠재적 필터 열은 절의 쿼리 시간에 사용되는 열입니다 WHERE .

집계되지 않은 형식

이 형식은 집계된 형식에 비해 성능 상승이 적은 더 넓은 범위를 위해 전체 집계되지 않은 데이터 모델(예 source: , joinfilter 필드)을 구체화합니다.

다음이 true인 경우 이 형식을 사용합니다.

  • 원본은 비용이 많이 드는 뷰 또는 SQL 쿼리입니다.
  • 메트릭 보기에 정의된 조인은 비용이 많이 듭니다.

비고

원본이 선택적 필터가 적용되지 않은 직접 테이블 참조인 경우 집계되지 않은 구체화된 뷰가 이점을 제공하지 않을 수 있습니다.

구체화 수명 주기

이 섹션에서는 수명 주기 동안 구체화를 만들고, 관리하고, 새로 고치는 방법을 설명합니다.

만들기 및 수정

메트릭 뷰를 생성하거나 수정할 때는 CREATE, ALTER 또는 카탈로그 탐색기를 사용하여 동기적으로 수행됩니다. 지정된 구체화된 뷰는 Lakeflow Spark 선언적 파이프라인을 사용하여 비동기적으로 구체화됩니다.

메트릭 뷰를 만들 때 Databricks는 Lakeflow Spark 선언적 파이프라인 파이프라인을 만들고 구체화된 뷰가 지정된 경우 즉시 초기 업데이트를 예약합니다. 메트릭 뷰는 물리적으로 데이터 구조를 생성하지 않고 원본 데이터에서 직접 쿼리하여 쿼리 가능합니다.

메트릭 뷰를 수정할 때 구체화를 처음으로 사용하도록 설정하지 않는 한 새 업데이트가 예약되지 않습니다. 구체화된 뷰는 다음 예약된 업데이트가 완료될 때까지 자동 쿼리 다시 쓰기에 사용되지 않습니다.

구체화 일정을 변경해도 새로 고침이 트리거되지는 않습니다.

새로 고침 동작을 더 세부적으로 제어하는 경우 수동 새로 고침을 참조하세요.

기본 파이프라인 검사

메트릭 뷰에 대한 구체화는 Lakeflow Spark 선언적 파이프라인을 사용하여 구현됩니다. 파이프라인에 대한 링크는 카탈로그 탐색기의 개요 탭에 있습니다. 카탈로그 탐색기에 액세스하는 방법을 알아보려면 카탈로그 탐색기란?을 참조하세요.

메트릭 뷰에서 실행 DESCRIBE EXTENDED 하여 이 파이프라인에 액세스할 수도 있습니다. 새로 고침 정보 섹션에는 파이프라인에 대한 링크가 포함되어 있습니다.

DESCRIBE EXTENDED my_metric_view;

예제 출력:

-- Returns additional metadata such as parent schema, owner, access time etc.
> DESCRIBE TABLE EXTENDED customer;
                      col_name                       data_type    comment
 ------------------------------- ------------------------------ ----------
                           ...                             ...        ...

 # Detailed Table Information
                           ...                             ...

                      Language                            YAML
              Table properties                             ...
 # Refresh information
         Latest Refresh status                       Succeeded
                Latest Refresh                     https://...
              Refresh Schedule                   EVERY 3 HOURS

수동 새로 고침

Lakeflow Spark 선언적 파이프라인 페이지로의 링크를 통해 파이프라인 업데이트를 수동으로 시작하여 구체화를 업데이트할 수 있습니다. 파이프라인 ID에 따라 API 호출을 사용하여 이를 오케스트레이션할 수도 있습니다.

예를 들어 다음 Python 스크립트는 파이프라인 새로 고침을 시작합니다.

from databricks.sdk import WorkspaceClient

client = WorkspaceClient()
pipeline_id = "01484540-0a06-414a-b10f-e1b0e8097f15"
client.pipelines.start_update(pipeline_id)

Lakeflow 작업의 일부로 수동 새로 고침을 실행하려면 위의 논리를 사용하여 Python 스크립트를 만들고 Python 스크립트 형식의 작업으로 추가합니다. 또는 동일한 논리를 사용하여 Notebook을 만들고 Notebook 유형의 작업을 추가할 수 있습니다.

증분 새로 고침

구체화된 뷰는 가능하면 증분 새로 고침을 사용하며 데이터 원본 및 계획 구조와 관련하여 동일한 제한 사항이 있습니다.

필수 구성 요소 및 제한 사항에 대한 자세한 내용은 구체화된 뷰에 대한 증분 새로 고침을 참조하세요.

자동 쿼리 다시 쓰기

메트릭 뷰에 대한 쿼리는 가능한 한 구체화를 최대한 활용하려고 합니다. 정확한 일치 및 집계되지 않은 일치의 두 가지 쿼리 다시 쓰기 전략이 있습니다.

집계 인식 쿼리 다시 쓰기

메트릭 뷰를 쿼리할 때 최적화 프로그램은 쿼리 및 사용 가능한 사용자 정의 구체화를 분석합니다. 쿼리는 다음 알고리즘을 사용하여 기본 테이블 대신 최상의 구체화에서 자동으로 실행됩니다.

  1. 먼저 정확한 일치를 시도합니다.
  2. 집계되지 않은 구체화가 있는 경우 집계되지 않은 일치를 시도합니다.
  3. 쿼리 다시 쓰기에 실패하면 쿼리는 원본 테이블에서 직접 읽습니다.

비고

쿼리 다시 쓰기를 적용하려면 먼저 구체화를 완료해야 합니다.

쿼리가 구체화된 뷰를 사용하고 있는지 확인

쿼리가 구체화된 뷰를 사용하고 있는지 확인하려면 쿼리에서 실행 EXPLAIN EXTENDED 하여 쿼리 계획을 확인합니다. 쿼리에서 구체화된 뷰를 사용하는 경우 리프 노드에는 YAML 파일의 구체화 이름과 이름이 포함됩니다 __materialization_mat___metric_view .

또는 쿼리 프로필에 동일한 정보가 표시됩니다.

정확히 일치

정확한 일치 전략에 적합하려면 쿼리의 그룹화 식이 구체화 차원과 정확하게 일치해야 합니다. 쿼리의 집계 식은 구체화 측정값의 하위 집합이어야 합니다.

집계되지 않은 매치

집계되지 않은 구체화를 사용할 수 있는 경우 이 전략은 항상 적격합니다.

청구서 발행

구체화된 뷰를 새로 고칠 때 Lakeflow Spark 선언적 파이프라인 사용 요금이 청구됩니다.

알려진 제한 사항

메트릭 뷰의 구체화에는 다음과 같은 제한 사항이 적용됩니다.

  • 다른 메트릭 뷰를 원본으로 참조하는 구체화가 있는 메트릭 뷰는 집계되지 않은 구체화를 가질 수 없습니다.