REPLACE WHERE와 구체화된 뷰 중 언제 사용해야 하나요

REPLACE WHERE 플로우와 독립형 물질화된 뷰 모두 소스 데이터 변경 시 파생 테이블을 유지할 수 있게 해주지만, 각각 다른 문제를 해결합니다. 주기적으로 시간 창이나 파티션을 덮어쓰는 대부분의 배치 추출, 변환, 로드(ETL) 워크로드의 경우 점진적 REPLACE WHERE 플로우를 사용하세요. 쿼리 가속 계층으로 물질화된 뷰를 사용해 미리 계산된 결과를 대시보드와 보고서에 전달합니다.

이 페이지는 독립형 스트리밍 테이블과 구체화된 뷰를 다룹니다. Lakeflow 파이프라인 내 REPLACE WHERE 흐름에 대해서는 REPLACE WHERE 흐름을 이용한 배치 처리를 참조하세요.

배치 덮어쓰기에는 REPLACE WHERE 사용하세요

REPLACE WHERE 흐름은 시간 창이나 파티션과 같은 조건식에 해당하는 행만 재계산하고 덮어씁니다. 나머지 행은 손대지 않습니다. 플로우는 해당 술어 범위에 대해 소스 쿼리를 재평가하기 때문에, 각 새로고침 비용은 테이블 크기가 아니라 범위의 크기에 따라 달라집니다.

구체화된 뷰는 정의 쿼리의 전체 결과를 유지합니다. Azure Databricks는 쿼리와 소스 데이터가 이를 지원하는 경우 구체화된 뷰를 점진적으로 새로 고침하고, 그렇지 않으면 전체 새로 고침을 실행합니다. 새로고침이 증분적인지 여부는 쿼리 구조와 소스 테이블에 따라 달라지므로, 각 새로고침의 비용을 예측하기가 더 어렵습니다. 독립형 구체화 뷰는 어떻게 새로 고쳐지나요?를 참조하세요.

경계가 있는 범위 내에서 변하는 배치 ETL 데이터 모델의 경우, REPLACE WHERE 플로우를 통해 각 새로고침이 어떤 행을 재작성할지 정확히 제어할 수 있습니다. 구체화된 뷰는 독자가 미리 계산된 결과에 빠르게 접근할 필요가 있을 때 더 적합합니다.

구성 요소를 메달리온 레이어에 매핑

다음 표는 메달리온 아키텍처 의 각 계층을 Databricks가 권장하는 구성에 매핑합니다:

레이어 건설하다 이유
Bronze (원시 수집) Lakeflow Connect 또는 자동 로더를 사용한 수집 Lands는 기록이 도착할 때마다 점진적으로 원시 기록을 재처리 없이 적재합니다.
은 (정보) 점진적 REPLACE WHERE 플로우 팩트 업데이트, 늦게 도착한 데이터, 수정을 위해 영향을 받는 시간 창이나 파티션만 덮어씁니다.
실버 (크기) AUTO CDC 흐름 삽입, 업데이트, 삭제 의미를 자동으로 적용하며, 서서히 변하는 차원(SCD) 타입 1 또는 타입 2로 역사를 보존합니다.
골드(집계 및 데이터 모델) 점진적 REPLACE WHERE 플로우 집합과 모델에 대해서는 술어 범위만 재계산하여 전체 테이블 재계산을 피합니다.
쿼리 가속 및 제공 구체화된 뷰 미리 계산된 결과를 대시보드와 보고서에 전달하고 쿼리 결과를 최신 상태로 유지합니다.

의사 결정 가이드

다음 가이드를 참고하여 두 구문 중에서 선택하세요.

다음과 같은 경우 REPLACE WHERE 플로를 사용하세요:

  • 시간 창이나 파티션에 대해 주기적으로 배치 덮어쓰기를 실행하세요.
  • 늦게 도착한 데이터를 수정하세요.
  • 규정 준수 삭제를 한정된 범위에 적용하세요.
  • 파티션 수준에서 데이터를 새로고침하세요.

다음과 같은 경우에 구체화된 뷰를 사용하세요:

  • 대시보드 쿼리를 가속화하세요.
  • 미리 계산된 집계 데이터를 읽기 클라이언트에 제공하세요.
  • 서빙 레이어의 쿼리 결과를 최신 상태로 유지하세요.

예시: REPLACE를 사용한 점진적 덮어쓰기 WHERE

다음 예시는 매번 새로고침할 때마다 최근 7일간의 데이터만 덮어쓰는 타겟 테이블을 정의합니다. 새로고침 중에 플로우는 술어와 일치하는 행을 삭제하고, 동일한 범위에 대한 소스 쿼리를 재계산한 후 결과를 삽입합니다. 창 밖의 줄들은 손대지 않고 남겨두었습니다:

CREATE OR REFRESH STREAMING TABLE payments_latest
FLOW REPLACE WHERE payment_date >= date_add(current_date(), -7) BY NAME
SELECT payment_id, booking_id, status, payment_date
FROM samples.wanderbricks.payments;

BY NAME이(가) 열이 위치가 아닌 이름으로 일치하도록 필요합니다. 전체 문법, 프레디킷 재정의, 백필, 증분 갱신 동작에 대해서는 독립형 스트리밍 테이블에 대한 REPLACE WHERE 흐름을 참조하세요.

추가 리소스