다음을 통해 공유


구체화된 뷰에 대한 증분적인 새로 고침

이 문서에서는 구체화된 뷰에서 증분 새로 고침에 대한 의미 체계 및 요구 사항을 간략하게 설명하고 증분 새로 고침을 지원하는 SQL 작업, 키워드 및 절을 식별합니다. 여기에는 증분 및 전체 새로 고침 간의 차이점에 대한 설명이 포함되며 구체화된 뷰와 스트리밍 테이블 중에서 선택하기 위한 권장 사항이 포함되어 있습니다.

서버리스 파이프라인을 사용하여 구체화된 뷰에서 업데이트를 실행하는 경우 많은 쿼리를 증분 방식으로 새로 고칠 수 있습니다. 증분 새로 고침은 구체화된 뷰를 정의하는 데 사용되는 데이터 원본의 변경 내용을 검색하고 결과를 증분 방식으로 계산하여 컴퓨팅 비용을 절감합니다.

서버리스 컴퓨팅에서 새로 고침 실행

새로 고침 작업은 작업이 Databricks SQL 또는 Lakeflow Spark 선언적 파이프라인에서 정의되었는지 여부에 관계없이 서버리스 파이프라인에서 실행됩니다.

Databricks SQL을 사용하여 정의된 구체화된 뷰의 경우 서버리스 Lakeflow Spark 선언적 파이프라인에 대해 작업 영역을 사용하도록 설정할 필요가 없습니다. 새로 고침은 서버리스 파이프라인을 자동으로 사용합니다.

Lakeflow Spark 선언적 파이프라인을 사용하여 정의된 구체화된 뷰의 경우 서버리스를 사용하도록 파이프라인을 구성해야 합니다. 서버리스 파이프라인 구성을 참조하세요.

구체화된 뷰에 대한 새로 고침 의미 체계는 무엇인가요?

구체화된 뷰는 일괄 처리 쿼리와 동등한 결과를 보장합니다. 예를 들어 다음 집계 쿼리를 고려합니다.

SELECT account_id,
  COUNT(txn_id) txn_count,
  SUM(txn_amount) account_revenue
FROM transactions_table
GROUP BY account_id

Azure Databricks 제품을 사용하여 이 쿼리를 실행하면 결과가 일괄 처리 의미 체계를 사용하여 계산되어 원본 transactions_table의 모든 레코드를 집계합니다. 즉, 모든 원본 데이터가 한 번의 작업으로 검색되고 집계됩니다.

Note

일부 Azure Databricks 제품은 마지막 쿼리가 실행된 후 데이터 원본이 변경되지 않은 경우 세션 내에서 또는 세션 간에 결과를 자동으로 캐시합니다. 자동 캐싱 동작은 구체화된 뷰와 다릅니다.

다음 예제에서는 이 일괄 처리 쿼리를 구체화된 뷰로 바꿉니다.

CREATE OR REPLACE MATERIALIZED VIEW transaction_summary AS
SELECT account_id,
  COUNT(txn_id) txn_count,
  SUM(txn_amount) account_revenue
FROM transactions_table
GROUP BY account_id

구체화된 뷰를 새로 고치면 계산된 결과가 일괄 처리 쿼리 의미 체계와 동일합니다. 이 쿼리는 증분 방식으로 새로 고칠 수 있는 구체화된 뷰의 예입니다. 즉, 새로 고침 작업은 결과를 계산하기 위해 원본 transactions_table 새 데이터 또는 변경된 데이터만 처리하는 데 최선의 노력을 기울입니다.

구체화된 뷰에 대한 데이터 원본 고려 사항

데이터 원본에 대해 구체화된 뷰를 정의할 수 있지만 모든 데이터 원본이 구체화된 뷰에 적합한 것은 아닙니다. 다음 주의 사항 및 권장 사항을 고려합니다.

Important

머티리얼라이즈드 뷰는 지원되는 작업에 대한 결과를 점진적으로 새로 고치기 위해 최선을 다합니다. 데이터 원본의 일부 변경 내용을 완전히 새로 고쳐야 합니다.

구체화된 뷰를 정의하는 쿼리가 증분 새로 고침을 지원하는 경우에도 구체화된 뷰의 모든 데이터 원본은 전체 새로 고침 의미 체계에 강력해야 합니다.

  • 전체 새로 고침이 비용이 많이 드는 쿼리의 경우 스트리밍 테이블을 사용하여 정확히 한 번 처리를 보장합니다. 예시에는 매우 큰 테이블이 포함됩니다.
  • 레코드를 한 번만 처리해야 하는 경우 데이터 원본에 대해 구체화된 뷰를 정의하지 마세요. 대신 스트리밍 테이블을 사용합니다. 예를 들면 다음과 같습니다.
    • 데이터 기록을 유지하지 않는 데이터 원본(예: Kafka)입니다.
    • 자동 로더를 사용하여 클라우드 개체 스토리지에서 데이터를 수집하는 쿼리와 같은 수집 작업
    • 처리 후 데이터를 삭제하거나 보관할 계획이지만 다운스트림 테이블에 정보를 유지해야 하는 모든 데이터 원본입니다. 예를 들어 특정 임계값보다 오래된 레코드를 삭제하려는 날짜 분할 테이블입니다.
  • 모든 데이터 원본이 증분 새로 고침을 지원하는 것은 아닙니다. 다음 데이터 원본은 증분 새로 고침을 지원합니다.
    • 델타 테이블은 Unity 카탈로그에서 관리하는 테이블과 Delta Lake가 지원하는 외부 테이블을 포함합니다.
    • 구체화된 보기.
    • AUTO CDC ... INTO 작업의 대상을 포함한 스트리밍 테이블입니다.
  • 일부 증분 새로 고침 작업을 수행하려면 쿼리된 데이터 원본에서 행 추적을 사용하도록 설정해야 합니다. 행 추적은 구체화된 뷰, 스트리밍 테이블 및 Unity 카탈로그 관리 테이블을 포함하는 Delta 테이블에서만 지원되는 Delta Lake 기능입니다. 델타 테이블에 대한 행 추적 사용을 참조하세요.
  • 행 필터 또는 열 마스크가 정의된 데이터 원본은 증분 새로 고침을 지원하지 않습니다. 행 필터 및 열 마스크 참조하세요

구체화된 뷰 최적화

최상의 성능을 얻기 위해 Databricks는 구체화된 모든 뷰 원본 테이블에서 다음 기능을 사용하도록 설정하는 것이 좋습니다.

만드는 동안 또는 나중에 ALTER TABLE 문을 사용하여 이러한 기능을 설정할 수 있습니다. 다음은 그 예입니다.

ALTER TABLE <table-name> SET TBLPROPERTIES (
  delta.enableDeletionVectors = true,
  delta.enableRowTracking = true,
  delta.enableChangeDataFeed = true);

구체화된 뷰에 대한 새로 고침 유형

구체화된 뷰가 업데이트되면 새로 고침 또는 전체 새로 고침을 지정할 수 있습니다.

  • 새로 고침은 증분 새로 고침을 시도하지만 필요한 경우 데이터의 전체 다시 계산을 수행합니다. 증분 새로 고침은 연결된 컴퓨팅이 서버리스인 경우에만 사용할 수 있습니다.
  • 전체 새로 고침은 항상 모든 입력을 구체화된 뷰로 다시 계산하고 모든 검사점을 다시 설정합니다.

업데이트에 사용된 새로 고침 유형을 확인하려면 업데이트의 새로 고침 유형 결정을 참조하세요.

기본 새로 고침

증분 새로 고침을 수행하려는 서버리스 시도에서 구체화된 뷰 의 기본 새로 고침입니다. 증분 새로 고침은 마지막 새로 고침 후 기본 데이터의 변경 내용을 처리한 다음 해당 데이터를 테이블에 추가합니다. 기본 테이블 및 포함된 작업에 따라 특정 유형의 구체화된 뷰만 증분 방식으로 새로 고칠 수 있습니다. 증분 새로 고침이 불가능하거나 연결된 컴퓨팅이 서버리스 대신 클래식인 경우 전체 다시 계산이 수행됩니다.

증분 새로 고침 및 전체 다시 계산의 출력은 동일합니다. Azure Databricks는 비용 분석을 실행하여 증분 새로 고침과 전체 다시 계산 중에서 더 저렴한 옵션을 선택합니다.

서버리스 파이프라인을 사용하여 업데이트된 구체화된 뷰만 증분 새로 고침을 사용할 수 있습니다. 서버리스 파이프라인을 사용하지 않는 구체화된 뷰는 항상 완전히 다시 계산됩니다.

SQL 웨어하우스 또는 서버리스 Lakeflow Spark 선언적 파이프라인을 사용하여 구체화된 뷰를 만들 때 Azure Databricks는 쿼리가 지원되는 경우 증분 방식으로 새로 고칩니다. 쿼리에서 지원되지 않는 식을 사용하는 경우 Azure Databricks는 전체 다시 계산을 대신 실행하여 비용을 증가시킬 수 있습니다.

업데이트에 사용된 새로 고침 유형을 확인하려면 업데이트의 새로 고침 유형 결정을 참조하세요.

전체 새로 고침

전체 새로 고침은 테이블 및 검사점을 지우고 원본에서 사용할 수 있는 모든 데이터를 다시 처리하여 구체화된 뷰의 결과를 덮어씁니다.

Databricks SQL을 사용하여 정의된 구체화된 뷰에서 전체 새로 고침을 수행하려면 다음 구문을 사용합니다.

REFRESH MATERIALIZED VIEW mv_name FULL

Lakeflow Spark 선언적 파이프라인에 정의된 구체화된 뷰의 경우 선택한 데이터 세트 또는 파이프라인의 모든 데이터 세트에 대해 전체 새로 고침을 실행하도록 선택할 수 있습니다. 파이프라인 새로 고침 의미 체계참조하세요.

Important

데이터 보존 임계값 또는 수동 삭제로 인해 레코드가 제거된 데이터 원본에 대해 전체 새로 고침이 실행되는 경우 제거된 레코드는 계산된 결과에 반영되지 않습니다. 데이터가 더 이상 원본에 남아 있지 않으면 이전 데이터를 복구하지 못할 수 있습니다. 원본 데이터에 더 이상 존재하지 않는 열의 스키마도 변경될 수 있습니다.

구체화된 뷰 증분 새로 고침에 대한 지원

다음 표에서는 SQL 키워드 또는 절에 의한 증분 새로 고침에 대한 지원을 나열합니다.

Important

일부 키워드 및 절은 쿼리된 데이터 원본에서 행 추적을 사용하도록 설정해야 합니다. 델타 테이블에 대한 행 추적 사용을 참조하세요.

이러한 키워드 및 절은 다음 표에 별표(*)로 표시됩니다.

SQL 키워드 또는 절 증분 새로 고침 지원
SELECT 표현* 예, 결정적 기본 제공 함수 및 변경할 수 없는 UDF(사용자 정의 함수)를 포함한 식이 지원됩니다.
GROUP BY Yes
WITH 예, 일반 테이블 식이 지원됩니다.
UNION ALL* Yes
FROM 지원되는 기본 테이블에는 델타 테이블, 구체화된 뷰 및 스트리밍 테이블이 포함됩니다.
WHERE, HAVING* 필터 절(예: WHEREHAVING)이 지원됩니다.
INNER JOIN* Yes
LEFT OUTER JOIN* Yes
FULL OUTER JOIN* Yes
RIGHT OUTER JOIN* Yes
OVER Yes. 창 함수에서 증분화하려면 PARTITION_BY 열을 지정해야 합니다.
QUALIFY Yes
EXPECTATIONS 예, 기대치를 포함하는 구체화된 뷰를 증분 방식으로 새로 고칠 수 있습니다. 그러나 다음과 같은 경우에는 증분 새로 고침이 지원되지 않습니다.
  • 구체화된 뷰가 기대치가 포함된 뷰에서 읽는 경우
  • 구체화된 뷰에 기대가 DROP 있고 해당 스키마에 열이 포함된 NOT NULL 경우
비결정적 함수 비결정적 시간 함수는 절에서 WHERE 지원됩니다. 여기에는 , current_date()current_timestamp().와 같은 now()함수가 포함됩니다. 다른 비결정적 함수는 지원되지 않습니다.
델타가 아닌 원본 볼륨, 외부 위치 및 외장 카탈로그와 같은 원본은 지원되지 않습니다.

업데이트의 새로 고침 유형 확인

구체화된 뷰 새로 고침의 성능을 최적화하기 위해 Azure Databricks는 비용 모델을 사용하여 새로 고침에 사용되는 기술을 선택합니다. 다음 표에서는 이러한 기술에 대해 설명합니다.

Technique 증분 업데이트? Description
FULL_RECOMPUTE No 구체화된 뷰가 완전히 다시 계산되었습니다.
NO_OP 해당 없음 기본 테이블의 변경 내용이 검색되지 않아 구체화된 뷰가 업데이트되지 않았습니다.
다음 중 한 가지:
  • ROW_BASED
  • PARTITION_OVERWRITE
  • WINDOW_FUNCTION
  • APPEND_ONLY
  • GROUP_AGGREGATE
  • GENERIC_AGGREGATE
Yes 구체화된 뷰는 지정된 기술을 사용하여 증분 방식으로 새로 고쳐졌습니다.

사용되는 기술을 확인하려면 다음과 같은 경우 Lakeflow Spark 선언적 파이프라인 이벤트 로그를 event_typeplanning_information쿼리합니다.

SELECT
  timestamp,
  message
FROM
  event_log(TABLE(<fully-qualified-table-name>))
WHERE
  event_type = 'planning_information'
ORDER BY
  timestamp desc;

카탈로그 및 스키마를 포함하여 <fully-qualified-table-name>을 구체화된 뷰의 정규화된 이름으로 바꿉니다.

이 명령에 대한 샘플 출력:

    • timestamp
    • message
    • 2025-03-21T22:23:16.497+00:00
    • Flow 'sales' has been planned in :re[LDP] to be executed as ROW_BASED.

파이프라인 이벤트 로그를 참조하세요.