구체화된 뷰에 대한 증분적인 새로 고침
이 문서에서는 구체화된 뷰에서 증분 새로 고침에 대한 의미 체계 및 요구 사항을 간략하게 설명하고 증분 새로 고침을 지원하는 SQL 작업, 키워드 및 절을 식별합니다. 여기에는 증분 및 전체 새로 고침 간의 차이점에 대한 설명이 포함되며 구체화된 뷰와 스트리밍 테이블 중에서 선택하기 위한 권장 사항이 포함되어 있습니다.
서버리스 파이프라인을 사용하여 구체화된 뷰에서 업데이트를 실행하는 경우 많은 쿼리를 증분 방식으로 새로 고칠 수 있습니다. 증분 새로 고침은 구체화된 뷰를 정의하는 데 사용되는 데이터 원본의 변경 내용을 검색하고 결과를 증분 방식으로 계산하여 컴퓨팅 비용을 절감합니다.
서버리스 파이프라인은 증분 갱신에 필요합니다.
구체화된 뷰에 대한 증분 새로 고침에는 서버리스 파이프라인이 필요합니다.
Databricks SQL에 정의된 구체화된 뷰에 대한 새로 고침 작업은 항상 서버리스 파이프라인을 사용하여 실행됩니다.
DLT 파이프라인을 사용하여 정의된 구체화된 뷰의 경우 서버리스를 사용하도록 파이프라인을 구성해야 합니다. 서버리스 DLT 파이프라인구성을 참조하세요.
구체화된 뷰에 대한 새로 고침 의미 체계는 무엇인가요?
구체화된 뷰는 일괄 처리 쿼리와 동등한 결과를 보장합니다. 예를 들어 다음 집계 쿼리를 고려합니다.
SELECT account_id,
COUNT(txn_id) txn_count,
SUM(txn_amount) account_revenue
FROM transactions_table
GROUP BY account_id
Azure Databricks 제품을 사용하여 이 쿼리를 실행하면 결과가 일괄 처리 의미 체계를 사용하여 계산되어 원본 transactions_table
의 모든 레코드를 집계합니다. 즉, 모든 원본 데이터가 한 번의 작업으로 검색되고 집계됩니다.
참고
일부 Azure Databricks 제품은 마지막 쿼리가 실행된 후 데이터 원본이 변경되지 않은 경우 세션 내에서 또는 세션 간에 결과를 자동으로 캐시합니다. 자동 캐싱 동작은 구체화된 뷰와 다릅니다.
다음 예제에서는 이 일괄 처리 쿼리를 구체화된 뷰로 바꿉니다.
CREATE OR REPLACE MATERIALIZED VIEW transation_summary AS
SELECT account_id,
COUNT(txn_id) txn_count,
SUM(txn_amount) account_revenue
FROM transactions_table
GROUP BY account_id
구체화된 뷰를 새로 고치면 계산된 결과가 일괄 처리 쿼리 의미 체계와 동일합니다. 이 쿼리는 증분 방식으로 새로 고칠 수 있는 구체화된 뷰의 예입니다. 즉, 새로 고침 작업은 결과를 계산하기 위해 원본 transactions_table
새 데이터 또는 변경된 데이터만 처리하는 데 최선의 노력을 기울입니다.
구체화된 뷰에 대한 데이터 원본 고려 사항
데이터 원본에 대해 구체화된 뷰를 정의할 수 있지만 모든 데이터 원본이 구체화된 뷰에 적합한 것은 아닙니다. 다음 주의 사항 및 권장 사항을 고려합니다.
중요
머티리얼라이즈드 뷰는 지원되는 작업에 대한 결과를 점진적으로 새로 고치기 위해 최선을 다합니다. 데이터 원본의 일부 변경 내용을 완전히 새로 고쳐야 합니다.
구체화된 뷰를 정의하는 쿼리가 증분 새로 고침을 지원하는 경우에도 구체화된 뷰의 모든 데이터 원본은 전체 새로 고침 의미 체계에 강력해야 합니다.
- 전체 새로 고침이 비용이 많이 드는 쿼리의 경우 스트리밍 테이블을 사용하여 정확히 한 번 처리를 보장합니다. 예를 들어 매우 큰 테이블이 있습니다.
- 레코드를 한 번만 처리해야 하는 경우 데이터 원본에 대해 구체화된 뷰를 정의하지 마세요. 대신 스트리밍 테이블을 사용합니다. 예를 들면 다음과 같습니다.
- 데이터 기록을 유지하지 않는 데이터 원본(예: Kafka)입니다.
- 자동 로더를 사용하여 클라우드 개체 스토리지에서 데이터를 수집하는 쿼리와 같은 수집 작업
- 처리 후 데이터를 삭제하거나 보관할 계획이지만 다운스트림 테이블에 정보를 유지해야 하는 모든 데이터 원본입니다. 예를 들어 특정 임계값보다 오래된 레코드를 삭제하려는 날짜 분할 테이블입니다.
- 모든 데이터 원본이 증분 새로 고침을 지원하는 것은 아닙니다. 다음 데이터 원본은 증분 새로 고침을 지원합니다.
- 델타 테이블은 Unity 카탈로그에서 관리하는 테이블과 Delta Lake가 지원하는 외부 테이블을 포함합니다.
- 구체화된 보기.
-
APPLY CHANGES INTO
작업의 대상을 포함한 스트리밍 테이블입니다.
- 일부 증분 새로 고침 작업을 수행하려면 쿼리된 데이터 원본에서 행 추적을 사용하도록 설정해야 합니다. 행 추적은 구체화된 뷰, 스트리밍 테이블 및 Unity 카탈로그 관리 테이블을 포함하는 Delta 테이블에서만 지원되는 Delta Lake 기능입니다. 델타 테이블에 대한 행 추적 사용을 참조하세요.
구체화된 뷰 최적화
최상의 성능을 얻기 위해 Databricks는 구체화된 모든 뷰 원본 테이블에서 다음 기능을 사용하도록 설정하는 것이 좋습니다.
구체화된 뷰에 대한 새로 고침 유형
구체화된 뷰의 갱신은 전체 또는 증분으로 이루어집니다. 모든 작업의 경우 증분 새로 고침 및 전체 새로 고침의 결과는 동일합니다. Azure Databricks는 비용 분석을 실행하여 데이터 원본을 변경하려면 전체 새로 고침이 필요한지 확인합니다.
업데이트에 사용된 새로 고침 유형을 확인하려면 업데이트의 새로 고침 유형 결정을 참조하세요.
전체 새로 고침
전체 새로 고침은 원본에서 사용할 수 있는 모든 데이터를 다시 처리하여 구체화된 뷰의 결과를 덮어씁니다. 데이터 원본이 변경된 방식에 따라 지정된 업데이트에서 구체화된 모든 뷰가 완전히 새로 고쳐질 수 있습니다.
필요에 따라 전체 새로 고침을 강제 적용할 수 있습니다. Databricks SQL을 사용하여 정의된 구체화된 뷰의 경우 다음 구문을 사용합니다.
REFRESH MATERIALIZED VIEW mv_name FULL
DLT 파이프라인에 정의된 구체화된 뷰의 경우 선택한 데이터 세트 또는 파이프라인의 모든 데이터 세트에 대해 전체 새로 고침을 실행하도록 선택할 수 있습니다. 파이프라인 새로 고침 의미 체계참조하세요.
중요한
데이터 보존 임계값 또는 수동 삭제로 인해 레코드가 제거된 데이터 원본에 대해 전체 새로 고침이 실행되는 경우 제거된 레코드는 계산된 결과에 반영되지 않습니다. 데이터가 더 이상 원본에 남아 있지 않으면 이전 데이터를 복구하지 못할 수 있습니다.
참고
필요에 따라 테이블 속성 pipelines.reset.allowed
false
설정하여 테이블에서 전체 새로 고침을 사용하지 않도록 설정할 수 있습니다.
증분 새로 고침
증분 새로 고침은 마지막 새로 고침 후 기본 데이터의 변경 내용을 처리한 다음 해당 데이터를 테이블에 추가합니다. 기본 테이블 및 포함된 작업에 따라 특정 유형의 구체화된 뷰만 증분 방식으로 새로 고칠 수 있습니다.
서버리스 파이프라인을 사용하여 업데이트된 구체화된 뷰만 증분 새로 고침을 사용할 수 있습니다. 서버리스 파이프라인을 사용하지 않는 구체화된 뷰는 항상 완전히 새로 고쳐집니다.
구체화된 뷰는 SQL 웨어하우스 또는 서버리스 DLT 파이프라인을 사용하여 만들 때 쿼리가 지원되는 경우 자동으로 증분 방식으로 새로 고쳐집니다. 쿼리에 증분 새로 고침에 대한 지원되지 않는 식이 포함된 경우 전체 새로 고침이 수행되어 추가 비용이 발생할 수 있습니다.
구체화된 뷰 증분 새로 고침에 대한 지원
다음 표에서는 SQL 키워드 또는 절에 의한 증분 새로 고침에 대한 지원을 나열합니다.
중요한
일부 키워드 및 절은 쿼리된 데이터 원본에서 행 추적을 사용하도록 설정해야 합니다. 델타 테이블에 대한 행 추적 사용을 참조하세요.
이러한 키워드 및 절은 다음 표에 별표(*)로 표시됩니다.
SQL 키워드 또는 절 | 증분 새로 고침 지원 |
---|---|
SELECT 표현* |
예, 결정적 기본 제공 함수 및 변경할 수 없는 UDF(사용자 정의 함수)를 포함한 식이 지원됩니다. |
GROUP BY |
예 |
WITH |
예, 일반 테이블 식이 지원됩니다. |
UNION ALL * |
예 |
FROM |
지원되는 기본 테이블에는 델타 테이블, 구체화된 뷰 및 스트리밍 테이블이 포함됩니다. |
WHERE , HAVING * |
필터 절(예: WHERE 및 HAVING )이 지원됩니다. |
INNER JOIN * |
예 |
LEFT OUTER JOIN * |
예 |
FULL OUTER JOIN * |
예 |
RIGHT OUTER JOIN * |
예 |
OVER |
예. 창 함수에서 증분화하려면 PARTITION_BY 열을 지정해야 합니다. |
QUALIFY |
예 |
EXPECTATIONS |
아니요. 기대치를 사용하는 구체화된 뷰는 항상 완전히 새로 고쳐집니다. |
메모
비결정적 함수(예: CURRENT_TIMESTAMP
)는 지원되지 않습니다.
업데이트의 새로 고침 유형 확인
구체화된 뷰 새로 고침의 성능을 최적화하기 위해 Azure Databricks는 비용 모델을 사용하여 새로 고침에 사용되는 기술을 선택합니다. 다음 표에서는 이러한 기술에 대해 설명합니다.
기법 | 증분 새로 고침? | 설명 |
---|---|---|
FULL_RECOMPUTE |
아니요 | 구체화된 뷰가 완전히 다시 계산되었습니다. |
NO_OP |
해당 없음 | 기본 테이블의 변경 내용이 검색되지 않아 구체화된 뷰가 업데이트되지 않았습니다. |
ROW_BASED , PARTITION_OVERWRITE 또는 WINDOW_FUNCTION |
예 | 구체화된 뷰는 지정된 기술을 사용하여 증분 방식으로 새로 고쳐졌습니다. |
APPEND_ONLY |
예 | 입력과 구체화된 뷰에 대한 변경 사항이 추가된 것뿐이기 때문에, 구체화된 뷰가 증분 방식으로 새로 고쳐졌습니다. |
GROUP_AGGREGATE 또는 GENERIC_AGGREGATE |
예 | 구체화된 뷰는 집계 함수를 사용하여 증분 방식으로 새로 고쳐졌습니다. |
사용되는 기술을 확인하려면 event_type
planning_information
DLT 이벤트 로그를 쿼리합니다.
SELECT
timestamp,
message
FROM
event_log(TABLE(<fully-qualified-table-name>))
WHERE
event_type = 'planning_information'
ORDER BY
timestamp desc;
카탈로그 및 스키마를 포함하여 <fully-qualified-table-name>
을 구체화된 뷰의 정규화된 이름으로 바꿉니다.