이 문서에서는 Databricks SQL에서 구체화된 뷰를 만들고 새로 고쳐 성능을 향상시키고 데이터 처리 및 분석 워크로드 비용을 줄이는 방법을 설명합니다.
구체화된 뷰란 무엇인가?
Databricks SQL에서 구체화된 뷰는 쿼리 결과를 물리적으로 저장하는 Unity 카탈로그 관리 테이블입니다. 주문형 결과를 계산하는 표준 뷰와 달리 구체화된 뷰는 결과를 캐시하고 기본 원본 테이블이 일정에 따라 또는 자동으로 변경될 때 업데이트합니다.
구체화된 뷰는 ETL(추출, 변환 및 로드) 처리와 같은 데이터 처리 워크로드에 적합합니다. 구체화된 뷰는 규정 준수, 수정, 집계 또는 CDC(일반 변경 데이터 캡처)를 위해 데이터를 처리하는 간단하고 선언적인 방법을 제공합니다. 구체화된 뷰는 기본 테이블을 정리, 보강 및 비정규화하여 사용하기 쉬운 변환을 가능하게 합니다. 비용이 많이 들거나 자주 사용되는 쿼리를 미리 계산하여 구체화된 뷰는 쿼리 대기 시간과 리소스 사용량을 낮춥니다. 대부분의 경우 원본 테이블의 변경 내용을 증분 방식으로 계산 하여 효율성과 최종 사용자 환경을 더욱 개선할 수 있습니다.
다음은 구체화된 뷰에 대한 일반적인 사용 사례입니다.
- 최종 사용자 쿼리 대기 시간을 최소화하여 BI 대시보드를 최신 상태로 유지합니다.
- 간단한 SQL 논리를 사용하여 복잡한 ETL 오케스트레이션을 줄입니다.
- 복잡한 계층화된 변환을 빌드합니다.
- up-to-date 인사이트를 사용하여 일관된 성능을 요구하는 모든 사용 사례.
Databricks SQL 웨어하우스에서 구체화된 뷰를 만들면, 구체화된 뷰의 생성 및 새로 고침을 처리하기 위해 서버리스 파이프라인이 만들어집니다.
카탈로그 탐색기에서 새로 고침 작업의 상태를 모니터링할 수 있습니다.
을 DESCRIBE EXTENDED사용하여 세부 정보 보기 참조
요구 사항
Databricks SQL에서 만든 구체화된 뷰는 서버리스 파이프라인에서 지원됩니다. 이 기능을 사용하려면 작업 영역에서 서버리스 파이프라인을 지원해야 합니다.
구체화된 뷰를 만들거나 새로 고치기 위한 요구 사항:
Unity 카탈로그를 지원하는 프로페셔널 또는 서버리스 SQL 웨어하우스를 사용해야 합니다.
구체화된 뷰를 새로 고치려면 만든 작업 영역에 있어야 합니다.
델타 테이블에서 구체화된 뷰를 증분 방식으로 새로 고치려면 원본 테이블에 행 추적을 사용하도록 설정해야 합니다.
소유자(구체화된 뷰를 만드는 사용자)에는 다음 권한이 있어야 합니다.
- 구체화된 뷰가 참조하는 기본 테이블에 대한
SELECT권한. - 구체화된 뷰에 대한 원본 테이블을 포함하는 카탈로그 및 스키마에 대한
USE CATALOG및USE SCHEMA권한입니다. - 구체화된 뷰를 위한 대상 카탈로그 및 스키마에 대한
USE CATALOG및USE SCHEMA권한. - 구체화된 뷰를 포함하는 스키마에 대한
CREATE TABLE및CREATE MATERIALIZED VIEW권한입니다.
- 구체화된 뷰가 참조하는 기본 테이블에 대한
구체화된 뷰를 새로 고치려면 구체화된 뷰에 대한 권한이 있어야 합니다
REFRESH.
- 작업 공간은 서버리스 SQL 웨어하우스를 지원하는 지역에 있어야 합니다.
구체화된 뷰를 쿼리하기 위한 요구 사항:
구체화된 뷰의 소유자여야 하거나, 구체화된 뷰에 대한
SELECT권한과 부모에 대한USE SCHEMA및USE CATALOG권한을 가지고 있어야 합니다.다음 컴퓨팅 리소스 중 하나를 사용해야 합니다.
SQL 웨어하우스
Lakeflow Spark 선언적 파이프라인 인터페이스
표준 액세스 모드 컴퓨팅(이전의 공유 액세스 모드)
작업 영역이 서버리스 컴퓨팅에 사용하도록 설정된 한 Databricks Runtime 15.4 이상에서 전용 액세스 모드(이전의 단일 사용자 액세스 모드). 전용 컴퓨팅에서 세분화된 액세스 제어를 참조하세요.
구체화된 뷰 소유자인 경우 14.3 이상에서 Databricks 런타임을 실행하는 전용 액세스 모드 컴퓨팅 리소스를 사용할 수 있습니다.
구체화된 뷰 사용에 대한 다른 제한 사항에 대해 알아보려면 제한 사항참조하세요.
구체화된 뷰 만들기
Databricks SQL 구체화된 뷰 CREATE 작업은 Databricks SQL Warehouse를 사용하여 구체화된 뷰에서 데이터를 만들고 로드합니다. 구체화된 뷰를 만드는 것은 동기 작업입니다. 즉, 구체화된 뷰가 만들어지고 초기 데이터 로드가 완료될 때까지 CREATE MATERIALIZED VIEW 명령이 차단됩니다. 서버리스 파이프라인은 모든 Databricks SQL 구체화된 뷰에 대해 자동으로 만들어집니다. 구체화된 뷰를 새로 고치면 파이프라인이 새로 고침을 처리합니다.
구체화된 뷰를 만들려면 CREATE MATERIALIZED VIEW 문을 사용합니다. create 문을 제출하려면 Azure Databricks UI, Databricks SQL CLI 또는 Databricks SQL API의 SQL 편집기를 사용합니다.
구체화된 뷰를 만드는 사용자는 구체화된 뷰 소유자입니다.
다음 예제에서는 기본 테이블 mv1구체화된 뷰 base_table1 만듭니다.
-- This query defines the materialized view:
CREATE OR REPLACE MATERIALIZED VIEW mv1
AS SELECT
date,
sum(sales) AS sum_of_sales
FROM
base_table1
GROUP BY
date;
CREATE OR REPLACE MATERIALIZED VIEW 문을 사용하여 구체화된 뷰를 만들면, 초기 데이터 새로 고침 및 데이터 채우기가 즉시 시작됩니다. SQL 웨어하우스의 컴퓨팅 성능은 소모되지 않습니다. 대신 서버리스 파이프라인은 생성 및 후속 새로 고침에 사용됩니다.
기본 테이블의 열 주석은 생성 시에만 구체화된 새 뷰로 자동으로 전파됩니다. 일정, 테이블 제약 조건 또는 기타 속성을 추가하려면 구체화된 뷰 정의(SQL 쿼리)를 수정합니다.
동일한 SQL 문은 다시 실행되거나 일정에 따라 구체화된 뷰를 새로 고칩니다. 이러한 방식으로 수행된 새로 고침은 다른 새로 고침의 역할을 합니다. 자세한 내용은 구체화된 뷰 새로 고침을 참조하세요.
구체화된 뷰를 구성하는 방법에 대한 자세한 내용은 Databricks SQL에서 구체화된 뷰 구성을 참조하세요. 구체화된 뷰를 만들기 위한 전체 구문에 대해 알아보려면 다음을 참조하세요 CREATE MATERIALIZED VIEW. 다양한 형식 및 다른 위치에서 데이터를 로드하는 방법에 대한 자세한 내용은 파이프라인에서 데이터 로드를 참조하세요.
외부 시스템에서 데이터 로드
지원되는 데이터 원본에 대해 Lakehouse Federation을 사용하여 외부 데이터에 구체화된 뷰를 만들 수 있습니다. Lakehouse Federation에서 지원하지 않는 원본에서 데이터를 로드하는 방법에 대한 자세한 내용은 데이터 형식 옵션을 참조하세요. 예제를 포함하여 데이터 로드에 대한 일반적인 내용은 파이프라인에서 데이터 로드를 참조하세요.
중요한 데이터 숨기기
구체화된 뷰를 사용하여 테이블에 액세스하는 사용자로부터 중요한 데이터를 숨길 수 있습니다. 이 작업을 수행하는 한 가지 방법은 처음에 해당 데이터를 포함하지 않도록 쿼리를 만드는 것입니다. 그러나 쿼리 사용자의 권한에 따라 열을 마스킹하거나 행을 필터링할 수도 있습니다. 예를 들어 tax_id 그룹에 속하지 않은 사용자를 위해 HumanResourcesDept 열을 숨길 수 있습니다. 이렇게 하려면 구체화된 뷰를 생성하는 동안 ROW FILTER 구문과 MASK 구문을 사용합니다. 자세한 내용은 행 필터 및 열 마스크를 참조하세요.
구체화된 뷰 새로 고침
구체화된 뷰를 새로 고치면 새로 고칠 때 기본 테이블의 최신 변경 내용이 반영되도록 보기가 업데이트됩니다.
구체화된 뷰를 정의할 때, CREATE OR REPLACE MATERIALIZED VIEW 문은 뷰를 생성하고 예약된 새로 고침을 수행하는 데 사용됩니다.
REFRESH MATERIALIZED VIEW 문을 사용하여 쿼리를 다시 제공할 필요 없이 구체화된 뷰를 새로 고칠 수도 있습니다. 이 명령에 대한 SQL 구문 및 매개 변수에 대한 자세한 내용은 REFRESH(MATERIALIZED VIEW 또는 STREAMING TABLE) 참조하세요. 증분 새로 고침이 가능한 구체화된 뷰 유형에 대해 더 알아보려면 구체화된 뷰의 증분 새로 고침을 참조하세요.
새로 고침 문을 제출하려면 Azure Databricks UI의 SQL 편집기, SQL 웨어하우스에 연결된 Notebook, Databricks SQL CLI또는 Databricks SQL API사용합니다.
소유자와 테이블에 대한 권한이 부여된 모든 사용자는 구체화된 REFRESH 뷰를 새로 고칠 수 있습니다.
다음 예제는 mv1 구체화된 뷰를 새로 고치는 예제입니다:
REFRESH MATERIALIZED VIEW mv1;
작업은 기본적으로 동기적입니다. 즉, 새로 고침 작업이 완료될 때까지 명령이 차단됩니다.
비동기적으로 새로 고치려면 키워드를 추가할 수 있습니다.ASYNC
REFRESH MATERIALIZED VIEW mv1 ASYNC;
Databricks SQL 구체화된 뷰는 어떻게 새로 고쳐지나요?
구체화된 뷰는 서버리스 파이프라인을 자동으로 만들고 사용하여 새로 고침 작업을 처리합니다. 새로 고침은 파이프라인에서 관리되며 업데이트는 구체화된 뷰를 만드는 데 사용되는 Databricks SQL 웨어하우스에 의해 모니터링됩니다. 구체화된 뷰는 일정에 따라 실행되는 파이프라인을 사용하여 업데이트할 수 있습니다. Databricks SQL에서 만든 구체화된 뷰는 항상 트리거된 모드에서 실행됩니다. 트리거된 대 연속 파이프라인 모드를 참조하세요.
구체화된 뷰는 두 가지 방법 중 하나를 사용하여 새로 고쳐집니다.
- 증분 새로 고침 - 시스템은 뷰의 쿼리를 평가하여 마지막 업데이트 후에 발생한 변경 내용을 식별하고 새 데이터 또는 수정된 데이터만 병합합니다.
- 전체 새로 고침 - 증분 새로 고침을 수행할 수 없는 경우 시스템은 전체 쿼리를 실행하고 구체화된 뷰의 기존 데이터를 새 결과로 바꿉니다.
쿼리의 구조와 원본 데이터 형식은 증분 새로 고침이 지원되는지 여부를 결정합니다. 증분 새로 고침을 지원하려면 행 추적 및 변경 데이터 피드를 사용하도록 설정된 델타 테이블에 원본 데이터를 저장해야 합니다. 구체화된 뷰를 만든 후 새로 고침 동작을 모니터링하여 증분 또는 전체 새로 고침을 통해 업데이트되는지 확인할 수 있습니다.
새로 고침 유형 및 증분 새로 고침을 최적화하는 방법에 대한 자세한 내용은 구체화된 뷰에 대한 증분 새로 고침을 참조하세요.
비동기 새로 고침
기본적으로 새로 고침 작업은 동기적으로 수행됩니다. 새로 고침 작업이 비동기적으로 수행되도록 설정할 수도 있습니다. 키워드와 함께 ASYNC refresh 명령을 사용하여 설정할 수 있습니다.
REFRESH(MATERIALIZED VIEW 또는 STREAMING TABLE) 각 접근 방식과 관련된 동작은 다음과 같습니다.
- 동기: 동기 새로 고침을 사용하면 새로 고침이 완료될 때까지 다른 작업이 진행되지 않습니다. Lakeflow 작업과 같은 오케스트레이션 도구에서 새로 고침 작업을 시퀀싱하는 경우와 같이 다음 단계에 결과가 필요한 경우 동기 새로 고침을 사용합니다. 구체화된 뷰를 작업과 함께 오케스트레이션하려면 SQL 태스크 유형을 사용합니다. Lakeflow 작업을 참조하세요.
- 비동기: 비동기 새로 고침은 구체화된 뷰 새로 고침이 시작될 때 서버리스 컴퓨팅에서 백그라운드 작업을 시작하여 데이터 로드가 완료되기 전에 명령을 반환할 수 있도록 합니다. 이 새로 고침 유형은 작업이 명령이 시작된 웨어하우스에서 컴퓨팅 용량을 반드시 보유하지는 않으므로 비용을 절감할 수 있습니다. 새로 고침이 유휴 상태가 되고 다른 작업이 실행되고 있지 않으면 새로 고침이 사용 가능한 다른 컴퓨팅을 사용하는 동안 웨어하우스가 종료될 수 있습니다. 또한 비동기 새로 고침은 여러 작업을 병렬로 시작할 수 있습니다.
물리화된 뷰 새로 고침 예약
정의된 일정에 따라 자동으로 새로 고치거나 업스트림 데이터가 변경될 때 트리거하도록 Databricks SQL 구체화 보기를 구성할 수 있습니다.
중요합니다
이 TRIGGER ON UPDATE 기능은 베타에 있습니다.
일정 또는 트리거를 설정하려면 다음 중 하나를 수행합니다.
-
SCHEDULE절을 사용하여 일정을 구성합니다. - 구체화된 뷰를
TRIGGER ON UPDATE만들 때 절을 사용하여 트리거를 구성합니다. - 문을 사용하여 일정 또는 트리거를 추가하거나 수정합니다 ALTER MATERIALIZED VIEW .
비고
작업에서 CREATE OR REPLACE MATERIALIZED VIEW 또는 REFRESH 문을 포함하는 작업을 생성한 후 다른 작업과 마찬가지로 오케스트레이션할 수 있습니다.
Lakeflow 작업을 참조하세요.
다음 예제에서는 기본 테이블에서 mv1구체화된 뷰 base_table1 를 만들고 한 시간에 한 번 구체화된 뷰를 새로 고치는 일정을 만듭니다.
CREATE OR REPLACE MATERIALIZED VIEW mv1
SCHEDULE EVERY 1 hour
AS SELECT
date,
sum(sales) AS sum_of_sales
FROM
base_table1
GROUP BY
date;
만든 후 일정을 설정하거나 변경하려면 다음 ALTER MATERIALIZED VIEW 문을 사용합니다.
-- Alters the schedule to refresh the materialized view when its upstream data
-- gets updated.
ALTER MATERIALIZED VIEW sales ALTER TRIGGER ON UPDATE;
일정을 만들면 업데이트를 처리하도록 새 Databricks 작업이 자동으로 구성됩니다.
일정을 보려면 다음 중 하나를 수행하세요.
- Azure Databricks UI의 SQL 편집기에서
DESCRIBE EXTENDED문을 실행합니다. DESCRIBE TABLE을(를) 참조하세요. - 카탈로그 탐색기를 사용하여 구체화된 뷰를 봅니다. 일정은 개요 탭의 새로 고침 상태나열됩니다. 카탈로그 탐색기란?을 참조하세요.
새로 고침 일정이 있는 경우 업데이트된 데이터가 필요한 경우 언제든지 수동 새로 고침을 실행할 수 있는 옵션이 있습니다.
활성 새로 고침 중지
Azure Databricks UI에서 활성 새로 고침을 중지하려면 파이프라인 세부 정보 페이지에서 중지 를 클릭하여 파이프라인 업데이트를 중지합니다. 파이프라인 API에서 Databricks CLI 또는 POST /api/2.0/pipelines/{pipeline_id}/stop 작업을 사용하여 새로 고침을 중지할 수도 있습니다.
새로 고침 시간 제한
장시간 실행되는 갱신은 시간 초과가 발생할 수 있습니다. 2025년 8월 14일 이후에 만들거나 새로 고친 구체화된 뷰는 새로 고침을 실행하는 데 사용되는 SQL 웨어하우스와 연결된 시간 제한을 사용합니다. 웨어하우스에 시간 제한 집합이 없으면 기본값인 2일이 사용됩니다.
비고
구체화된 뷰는 CREATE OR REFRESH 문을 수동으로 실행할 때만 시간 초과를 동기화합니다. 예약된 업데이트는 가장 최근의 CREATE OR REFRESH시간 제한을 유지합니다.
새로 고침을 위해 SQL의 구성을 사용하여 STATEMENT_TIMEOUT 시간 제한을 명시적으로 설정할 수 있습니다.
STATEMENT_TIMEOUT을(를) 참조하세요.
삭제 벡터가 활성화된 구체화된 뷰에서 기록을 영구적으로 삭제하기
중요합니다
구체화된 뷰가 있는 REORG 문에 대한 지원은 공개 미리 보기 단계에있습니다.
비고
- 구체화된 뷰에서
REORG문을 사용하려면 Databricks Runtime 15.4 이상이 필요합니다. -
REORG문을 구체화된 뷰와 함께 사용할 수 있지만, 삭제 벡터가 활성화된 구체화된 뷰에서 레코드를 삭제할 때만 필요합니다. 삭제 벡터를 사용하지 않고 구체화된 뷰와 함께 사용할 때는 명령이 적용되지 않습니다.
GDPR 준수와 같이 삭제 벡터가 활성화된 구체화된 뷰에 대한 기본 스토리지에서 레코드를 물리적으로 삭제하려면 구체화된 뷰의 데이터에서 작업이 실행되도록 추가 VACUUM 단계를 수행해야 합니다.
레코드를 물리적으로 삭제하려면 다음을 수행합니다.
- 구체화된 뷰에 대해
REORG문을 실행하고APPLY (PURGE)매개 변수를 지정합니다. (예:REORG TABLE <materialized-view-name> APPLY (PURGE);) REORG TABLE을(를) 참조하세요. - 구체화된 뷰의 데이터 보존 기간이 지나도록 기다립니다. 기본 데이터 보존 기간은 7일이지만
delta.deletedFileRetentionDuration테이블 속성으로 구성할 수 있습니다. 시간 이동 쿼리에 대한 데이터 보존 구성을 참조하세요. - 구체화된 뷰
REFRESH. 구체화된 뷰 새로 고침을 참조하세요. 작업 후REFRESH24시간 이내에 레코드를 영구적으로 삭제하는 데 필요한 작업을 포함한VACUUM파이프라인 유지 관리 작업이 자동으로 실행됩니다.
구체화된 뷰를 삭제합니다.
비고
구체화된 뷰를 삭제하는 명령을 제출하려면 구체화된 뷰의 소유자이거나 구체화된 뷰에 대한 MANAGE 권한이 있어야 합니다.
구체화된 뷰를 삭제하려면 DROP VIEW 문을 사용합니다.
DROP 문을 제출하려면 Azure Databricks UI, Databricks SQL CLI 또는 Databricks SQL API에서 SQL 편집기를 사용할 수 있습니다. 다음 예제는 mv1 물질화된 뷰를 삭제합니다:
DROP MATERIALIZED VIEW mv1;
카탈로그 탐색기를 사용하여 구체화된 뷰를 삭제할 수도 있습니다.
-
을 클릭합니다.사이드바의 카탈로그입니다.
- 왼쪽의 카탈로그 탐색기 트리에서 카탈로그를 열고 구체화된 뷰가 있는 스키마를 선택합니다.
- 선택한 스키마 아래에서 테이블 항목을 열고 구체화된 보기를 클릭합니다.
- 케밥 메뉴
에서 삭제를 선택합니다.
구체화된 뷰의 비용을 이해하기
구체화된 뷰는 서버리스 컴퓨팅에서 실행되므로, Notebook이나 작업을 위해 설정한 컴퓨팅 외부에서 발생하는 비용을 어떻게 이해해야 할지 궁금할 수 있습니다. 구체화된 뷰 사용량은 DBU 사용량에 의해 추적됩니다. 자세한 내용은 구체화된 뷰 또는 스트리밍 테이블의 DBU 소비량에 대한 더 많은 정보를 알아보세요.
행 추적 활성화
델타 테이블에서 증분 새로 고침을 지원하려면 해당 원본 테이블에 대해 행 추적을 사용하도록 설정해야 합니다. 원본 테이블을 다시 만드는 경우 행 추적을 다시 사용하도록 설정해야 합니다.
다음 예제에서는 테이블에서 행 추적을 사용하도록 설정하는 방법을 보여 줍니다.
ALTER TABLE source_table SET TBLPROPERTIES (delta.enableRowTracking = true);
자세한 내용은 델타 테이블에 행 추적 사용을 참조하세요.
제한 사항
- 컴퓨팅 및 작업 영역 요구 사항은 요구 사항을 참조 하세요.
- 증분 새로 고침 요구 사항은 구체화된 뷰에 대한 증분 새로 고침을 참조하세요.
- 구체화된 뷰는 ID 열 또는 서로게이트 키를 지원하지 않습니다.
- 구체화된 뷰가
NULL가능한 열에 대해 합계 집계를 사용하고 해당 열에NULL값만 남아 있는 경우 구체화된 뷰 결과 집계 값은NULL대신 0입니다. - 구체화된 뷰에서는 변경 데이터 피드 를 읽을 수 없습니다.
- 시간 이동 쿼리는 구체화된 뷰에서 지원되지 않습니다.
- 구체화된 뷰를 지원하는 기본 파일에는 구체화된 뷰 정의에 표시되지 않는 업스트림 테이블의 데이터(개인 식별 가능한 정보 포함)가 포함될 수 있습니다. 이 데이터는 구체화된 뷰의 증분 새로 고침을 지원하기 위해 기본 스토리지에 자동으로 추가됩니다. 구체화된 뷰의 기본 파일은 구체화된 뷰 스키마의 일부가 아닌 업스트림 테이블의 데이터를 노출할 위험이 있으므로 Databricks는 신뢰할 수 없는 다운스트림 소비자와 기본 스토리지를 공유하지 않는 것이 좋습니다. 예를 들어 구체화된 뷰의 정의에
COUNT(DISTINCT field_a)절이 포함되어 있다고 가정합니다. 구체화된 뷰 정의에 집계COUNT DISTINCT절만 포함되더라도 기본 파일에는field_a실제 값 목록이 포함됩니다. - 전용 컴퓨팅에서 이러한 기능을 사용하는 경우에도 서버리스 컴퓨팅 요금이 발생할 수 있습니다.
- 구체화된 뷰에서 Azure Private Link 연결을 사용해야 하는 경우 Databricks 담당자에게 문의하세요.
외부 클라이언트에서 구체화된 뷰에 액세스
개방형 API를 지원하지 않는 외부 Delta Lake 또는 Iceberg 클라이언트에서 구체화된 뷰에 액세스하려면 호환 모드를 사용할 수 있습니다. 호환 모드는 Delta Lake 또는 Iceberg 클라이언트에서 액세스할 수 있는 구체화된 뷰의 읽기 전용 버전을 만듭니다.