Databricks SQL에서 구체화된 뷰 사용
참고 항목
구체화된 뷰에서 Azure Private Link 연결을 사용해야 하는 경우 Databricks 담당자에게 문의하세요.
이 문서에서는 Databricks SQL에서 구체화된 뷰를 만들고 사용하여 성능을 향상시키고 데이터 처리 및 분석 워크로드 비용을 줄이는 방법을 설명합니다.
Important
Databricks SQL에서 만든 구체화된 뷰는 서버리스 Delta Live Tables 파이프라인에서 지원됩니다. 이 기능을 사용하려면 작업 영역에서 서버리스 파이프라인을 지원해야 합니다.
구체화된 뷰란?
Databricks SQL에서 구체화된 뷰는 사용자가 원본 테이블의 최신 데이터 버전을 기반으로 결과를 미리 계산할 수 있도록 하는 Unity 카탈로그 관리 테이블입니다. 구체화된 뷰를 쿼리할 때 항상 결과를 업데이트하는 대신 구체화된 뷰를 마지막으로 새로 고칠 때 반환된 결과가 데이터 상태를 반영하기 때문에 Azure Databricks의 구체화된 뷰는 다른 구현과 다릅니다. 구체화된 뷰를 수동으로 새로 고치거나 새로 고침을 예약할 수 있습니다.
구체화된 뷰는 ETL(추출, 변환 및 로드) 처리와 같은 데이터 처리 워크로드에 강력합니다. 구체화된 뷰는 규정 준수, 수정, 집계 또는 CDC(일반 변경 데이터 캡처)를 위해 데이터를 처리하는 간단하고 선언적인 방법을 제공합니다. 구체화된 뷰는 느린 쿼리와 자주 사용되는 계산을 미리 계산하여 비용을 절감하고 쿼리 대기 시간을 개선합니다. 구체화된 뷰는 기본 테이블을 정리, 보강 및 비정규화하여 사용하기 쉬운 변환을 가능하게 합니다. 구체화된 뷰는 간단한 최종 사용자 환경을 제공하면서 비용을 절감할 수 있습니다. 경우에 따라 기본 테이블의 변경 내용을 증분 방식으로 계산할 수 있기 때문입니다.
구체화된 뷰는 델타 라이브 테이블의 출시와 함께 Azure Databricks에서 처음 지원되었습니다. Databricks SQL 웨어하우스 에서 구체화된 뷰를 만들면 구체화된 뷰로 새로 고침을 처리하기 위해 서버리스 파이프라인 이 만들어집니다. Delta Live Tables UI 또는 파이프라인 API에서 새로 고침 작업의 상태를 모니터링할 수 있습니다. 구체화된 뷰 새로 고침의 상태 보기를 참조하세요.
요구 사항
구체화된 뷰를 만들거나 새로 고치려면 다음을 수행합니다.
Unity 카탈로그가 지원되는 프로 또는 서버리스 SQL Warehouse를 사용해야 합니다.
구체화된 뷰를 새로 고치려면 만든 작업 영역에 있어야 합니다.
작업 공간은 서버리스 SQL Warehouse를 지원하는 지역에 있어야 합니다.
구체화된 뷰를 쿼리합니다.
- 구체화된 뷰의 소유자이거나 구체화된 뷰에
SELECT
가 있고 부모에USE SCHEMA
및USE CATALOG
가 있어야 합니다. - 다음 컴퓨팅 리소스 중 하나를 사용해야 합니다.
- SQL Warehouse
- Delta Live Tables 인터페이스
- 공유 액세스 모드 컴퓨팅
- 작업 영역이 서버리스 컴퓨팅에 사용하도록 설정된 한 Databricks Runtime 15.4 이상의 단일 사용자 액세스 모드입니다. 단일 사용자 컴퓨팅에 대한 세분화된 액세스 제어를 참조 하세요.
- 구체화된 뷰 소유자인 경우에만 14.3에서 15.3 사이의 Databricks 런타임을 실행하는 단일 사용자 액세스 모드 컴퓨팅 리소스입니다.
구체화된 뷰 사용에 대한 다른 제한 사항에 대해 알아보려면 제한 사항을 참조 하세요.
구체화된 뷰 만들기
Databricks SQL 구체화된 뷰 CREATE
작업은 Databricks SQL Warehouse를 사용하여 구체화된 뷰에서 데이터를 만들고 로드합니다. 구체화된 뷰를 만드는 것은 동기 작업입니다. 즉, 구체화된 뷰가 만들어지고 초기 데이터 로드가 완료될 때까지 CREATE MATERIALIZED VIEW
명령이 차단됩니다. 서버리스 Delta Live Tables 파이프라인은 모든 Databricks SQL 구체화된 뷰에 대해 자동으로 만들어집니다. 구체화된 뷰를 새로 고침하 면 Delta Live Tables 파이프라인이 새로 고침을 처리합니다.
구체화된 뷰를 만들려면 CREATE MATERIALIZED VIEW
문을 사용합니다. create 문을 제출하려면 Azure Databricks UI, Databricks SQL CLI 또는 Databricks SQL API의 SQL 편집기를 사용합니다.
값이 설정된 "PREVIEW"
절을 사용하여 TBLPROPERTIES
create 문이 실행되는 런타임 채널을 선택할 수 있습니다"CURRENT"
. 기본값은 "CURRENT"
입니다. Delta Live Tables 채널에 대한 자세한 내용은 Delta Live Tables 런타임 채널을 참조 하세요. 구문 및 매개 변수에 대한 자세한 내용은 CREATE MATERIALIZED VIEW를 참조하세요.
참고 항목
구체화된 뷰를 만드는 사용자는 구체화된 뷰 소유자이며 다음 권한이 있어야 합니다.
- 구체화된 뷰에서 참조하는 기본 테이블에 대한
SELECT
권한이 있습니다. - 구체화된 뷰의 소스 테이블이 포함된 카탈로그 및 스키마에 대한
USE CATALOG
및USE SCHEMA
권한이 있습니다. - 구체화된 뷰에 대한 대상 카탈로그 및 스키마에 대한
USE CATALOG
및USE SCHEMA
권한이 있습니다. - 구체화된 뷰가 포함된 스키마에 대한
CREATE TABLE
및CREATE MATERIALIZED VIEW
권한이 있습니다.
다음 예에서는 기본 테이블 base_table1
에서 구체화된 뷰 mv1
를 만듭니다:
CREATE MATERIALIZED VIEW mv1
AS SELECT
date, sum(sales) AS sum_of_sales
FROM
base_table1
GROUP BY
date;
외부 시스템에서 데이터 로드
Databricks는 지원되는 데이터 원본에 대해 Lakehouse Federation을 사용하여 외부 데이터를 로드하는 것이 좋습니다. Lakehouse Federation에서 지원하지 않는 원본에서 데이터를 로드하는 방법에 대한 자세한 내용은 데이터 형식 옵션을 참조하세요.
구체화된 뷰 새로 고침
이 REFRESH
작업은 구체화된 뷰를 새로 고쳐 기본 테이블의 최신 변경 내용을 반영합니다. 작업은 기본적으로 동기적입니다. 즉, 새로 고침 작업이 완료될 때까지 명령이 차단됩니다. 구체화된 뷰를 새로 고치려면 REFRESH MATERIALIZED VIEW
문을 사용합니다. 이 명령에 대한 SQL 구문 및 매개 변수에 대한 자세한 내용은 REFRESH (MATERIALIZED VIEW 또는 STREAMING TABLE)을 참조하세요. 증분 방식으로 새로 고칠 수 있는 구체화된 뷰 유형에 대한 자세한 내용은 구체화된 뷰에 대한 증분 새로 고침을 참조 하세요.
새로 고침 문을 제출하려면 Azure Databricks UI의 SQL 편집기, SQL Warehouse에 연결된 Notebook, Databricks SQL CLI 또는 Databricks SQL API를 사용합니다.
소유자만 구체화된 뷰를 REFRESH
할 수 있습니다.
다음 예제는 mv1
구체화된 뷰를 새로 고치는 예제입니다:
REFRESH MATERIALIZED VIEW mv1;
Databricks SQL 구체화된 뷰는 어떻게 새로 고쳐지나요?
구체화된 뷰는 서버리스 Delta Live Tables 파이프라인을 자동으로 만들고 사용하여 새로 고침 작업을 처리합니다. 새로 고침은 Delta Live Tables 파이프라인에서 관리되며, 구체화된 뷰를 만드는 데 사용되는 Databricks SQL Warehouse에서 업데이트를 모니터링합니다. 구체화된 뷰는 일정에 따라 실행되는 Delta Live Tables 파이프라인을 사용하여 업데이트할 수 있습니다. 트리거된 파이프라인 모드와 연속 파이프라인 모드를 참조하세요.
참고 항목
Delta Live Tables 런타임은 델타가 아닌 데이터 원본의 변경 사항을 감지할 수 없습니다. 테이블은 여전히 정기적으로 업데이트되지만, 과도한 재계산으로 인해 컴퓨팅에서 발생하는 증분 처리 속도가 느려지는 것을 방지하기 위해 기본 트리거 간격이 더 길어집니다.
기본적으로 새로 고침 작업은 동기적으로 수행됩니다. 새로 고침 작업이 비동기적으로 수행되도록 설정할 수도 있습니다. 새로 고침 명령을 사용하여 설정할 수 있습니다. 새로 고침(구체화된 뷰 또는 스트리밍 테이블)을 참조하세요. 각 접근 방식과 관련된 동작은 다음과 같습니다.
- 동기: 동기 새로 고침을 사용하면 새로 고침이 완료될 때까지 다른 작업이 진행되지 않습니다. Databricks 작업과 같은 오케스트레이션 도구에서 새로 고침 작업을 시퀀싱하는 경우와 같이 다음 단계에 결과가 필요한 경우 동기 새로 고침을 사용합니다. 작업으로 구체화된 뷰를 오케스트레이션하려면 SQL 작업 유형을 사용합니다. 워크플로 예약 및 오케스트레이션을 참조하세요.
- 비동기: 비동기 새로 고침은 구체화된 뷰 새로 고침이 시작될 때 Delta Live Tables 컴퓨팅에서 백그라운드 작업을 시작하여 데이터 로드가 완료되기 전에 명령을 반환할 수 있도록 합니다. 이 새로 고침 유형은 작업이 명령이 시작된 웨어하우스에서 컴퓨팅 용량을 반드시 보유하지는 않으므로 비용을 절감할 수 있습니다. 새로 고침이 유휴 상태가 되고 다른 작업이 실행되고 있지 않으면 새로 고침이 사용 가능한 다른 컴퓨팅을 사용하는 동안 웨어하우스가 종료될 수 있습니다. 또한 비동기 새로 고침은 여러 작업을 병렬로 시작할 수 있습니다.
일부 쿼리는 증분 방식으로 새로 고칠 수 있습니다. 구체화된 뷰는 증분 새로 고침을 참조 하세요. 증분 새로 고침을 수행할 수 없는 경우 전체 새로 고침이 대신 수행됩니다.
구체화된 뷰 새로 고침 예약
정의된 일정에 따라 자동으로 새로 고쳐지도록 Databricks SQL 구체화된 보기를 구성할 수 있습니다. 일정을 설정하려면 다음 중 하나를 수행합니다.
- 구체화된 뷰를 만들 때
SCHEDULE
절을 사용하여 일정을 구성합니다. - ALTER MATERIALIZED VIEW 문을 사용하여 일정을 추가합니다.
일정을 만들면 업데이트를 처리하도록 새 Databricks 작업이 자동으로 구성됩니다.
일정을 보려면 다음 중 하나를 수행하세요.
- Azure Databricks UI의 SQL 편집기에서
DESCRIBE EXTENDED
문을 실행합니다. - 카탈로그 탐색기를 사용하여 구체화된 뷰를 봅니다. 일정은 새로 고침 상태의 개요 탭에 나열됩니다. 카탈로그 탐색기란?을 참조하세요.
구체화된 뷰 새로 고침의 상태 보기
참고 항목
Delta Live Tables 파이프라인은 구체화된 뷰 새로 고침을 관리하므로 파이프라인의 시작 시간에 의해 대기 시간이 발생합니다. 이 시간은 새로 고침을 수행하는 데 필요한 시간 외에도 초에서 분 단위로 표시될 수 있습니다.
Delta Live Tables UI에서 구체화된 뷰를 관리하는 파이프라인을 보거나 구체화된 뷰에 대한 DESCRIBE EXTENDED
명령에서 반환된 새로 고침 정보를 확인하여 구체화된 뷰 새로 고침의 상태를 볼 수 있습니다.
Delta Live Tables 이벤트 로그를 쿼리하여 구체화된 뷰의 새로 고침 기록을 볼 수도 있습니다. 구체화된 뷰에 대한 새로 고침 기록 보기를 참조하세요.
Delta Live Tables UI에서 새로 고침 상태 보기
기본적으로 구체화된 뷰를 관리하는 Delta Live Tables 파이프라인은 Delta Live Tables UI에 표시되지 않습니다. Delta Live Tables UI에서 파이프라인을 보려면 파이프라인의 파이프라인 세부 정보 페이지에 대한 링크에 직접 액세스해야 합니다. 링크에 액세스하려면
DESCRIBE EXTENDED
문에서 반환된 테이블의 최신 새로 고침 행에 표시된 링크를 복사하여 붙여넣습니다.- 구체화된 보기의 계보 탭에서 파이프라인을 클릭한 다음 파이프라인 링크를 클릭합니다.
Azure Databricks UI의 SQL 편집기를 사용하여 제출된 비동기 REFRESH
명령의 경우 결과 패널에 표시된 링크에 따라 새로 고침 상태를 볼 수 있습니다.
활성 새로 고침 중지
Delta Live Tables UI에서 활성 새로 고침을 중지하려면 파이프라인 세부 정보 페이지에서 중지를 클릭하여 파이프라인 업데이트를 중지합니다. 파이프라인 API에서 Databricks CLI 또는 POST /api/2.0/pipelines/{pipeline_id}/stop 작업을 사용하여 새로 고침을 중지 할 수도 있습니다.
구체화된 뷰의 정의 업데이트
구체화된 뷰의 정의를 업데이트하려면 먼저 삭제한 다음 구체화된 뷰를 다시 만들어야 합니다.
구체화된 뷰를 삭제합니다.
참고 항목
구체화된 뷰를 삭제하는 명령을 제출하려면 구체화된 뷰의 소유자여야 합니다.
구체화된 뷰를 삭제하려면 DROP VIEW 문을 사용합니다. DROP
문을 제출하려면 Azure Databricks UI, Databricks SQL CLI 또는 Databricks SQL API에서 SQL 편집기를 사용할 수 있습니다. 다음 예제는 mv1
구체화된 뷰를 드롭합니다:
DROP MATERIALIZED VIEW mv1;
구체화된 뷰 설명
구체화된 뷰에 대한 열 및 데이터 형식을 검색하려면 DESCRIBE
문을 사용합니다. 구체화된 뷰의 소유자, 위치, 생성 시간 및 새로 고침 상태와 같은 열, 데이터 형식 및 메타데이터를 검색하려면 DESCRIBE EXTENDED
을 사용합니다. DESCRIBE
문을 제출하려면 Azure Databricks UI, Databricks SQL CLI 또는 Databricks SQL API의 SQL 편집기를 사용합니다.
구체화된 뷰의 소유자 변경
메타스토어 관리자 및 작업 영역 관리자인 경우 구체화된 뷰의 소유자를 변경할 수 있습니다. 구체화된 뷰는 델타 라이브 테이블 파이프라인을 자동으로 만들고 사용하여 변경 내용을 처리합니다. 구체화된 뷰 소유자를 변경하려면 다음 단계를 사용합니다.
- 구체화된 보기의 계보 탭에서 파이프라인을 클릭한 다음 파이프라인 링크를 클릭합니다.
- 파이프라인 이름 오른쪽에 있는 kebab 메뉴를 클릭하고 권한을 클릭합니다. 그러면 권한 대화 상자가 열립니다.
- 현재 소유자 이름 오른쪽에 있는 x를 클릭하여 현재 소유자를 제거합니다.
- 입력을 시작하여 사용 가능한 사용자 목록을 필터링합니다. 새 파이프라인 소유자여야 하는 사용자를 클릭합니다.
- 저장을 클릭하여 변경 사항을 저장하고 대화 상자를 닫습니다.
파이프라인에 정의된 구체화된 뷰를 포함한 모든 파이프라인 자산은 새 파이프라인 소유자가 소유합니다. 이후의 모든 업데이트는 새 소유자의 ID를 사용하여 실행됩니다.
구체화된 뷰에 대한 액세스 제어
구체화된 뷰는 잠재적으로 프라이빗 데이터가 노출되지 않도록 하면서 데이터 공유를 지원하기 위해 다양한 액세스 제어를 지원합니다. 구체화된 뷰 소유자는 다른 사용자에게 SELECT
권한을 부여할 수 있습니다. 구체화된 뷰에 대한 SELECT
액세스 권한이 있는 사용자는 구체화된 뷰에서 참조하는 테이블에 대한 SELECT
액세스 권한이 필요하지 않습니다. 이 액세스 제어를 사용하면 기본 데이터에 대한 액세스를 제어하면서 데이터 공유를 사용할 수 있습니다.
구체화된 뷰에 권한 부여
구체화된 뷰에 대한 액세스 권한을 부여하려면 다음 GRANT
문을 사용합니다.
GRANT
privilege_type [, privilege_type ] ...
ON <mv_name> TO principal;
privilege_type은 다음과 같을 수 있습니다:
SELECT
- 사용자가 구체화된 뷰를SELECT
로 지정할 수 있습니다.REFRESH
- 사용자가 구체화된 뷰를REFRESH
로 지정할 수 있습니다. 새로 고침은 소유자의 권한을 사용하여 실행됩니다.
다음 예제에서는 구체화된 뷰를 만들고 사용자에게 선택 및 새로 고침 권한을 부여합니다.
CREATE MATERIALIZED VIEW <mv_name> AS SELECT * FROM <base_table>;
GRANT SELECT ON <mv_name> TO user;
GRANT REFRESH ON <mv_name> TO user;
구체화된 뷰에서 권한 취소
구체화된 뷰에서 액세스를 취소하려면 REVOKE
문을 사용합니다.
REVOKE
privilege_type [, privilege_type ]
ON <name> FROM principal;
구체화된 뷰 소유자 또는 구체화된 뷰에 대한 SELECT
권한이 부여된 다른 사용자로부터 기준 테이블에 대한 SELECT
권한이 취소되거나 기준 테이블이 삭제된 경우에도 액세스 권한이 부여된 구체화된 뷰 소유자 또는 사용자는 여전히 구체화된 뷰를 쿼리할 수 있습니다. 그러나 다음과 같은 동작이 발생합니다.
- 구체화된 뷰 소유자 또는 구체화된 뷰에 대한 액세스 권한을 잃은 다른 사용자는 더 이상 해당 구체화된 뷰를
REFRESH
표시할 수 없으며, 해당 구체화된 뷰는 오래된 뷰가 됩니다. - 일정으로 자동화된 경우 다음 예약된
REFRESH
는 실패하거나 실행되지 않습니다.
다음 예는 mv1
로부터 SELECT
권한을 취소하는 예입니다:
REVOKE SELECT ON mv1 FROM user1;
변경 데이터 피드의 사용
특정 고급 사용 사례를 제외하고 구체화된 뷰 기본 테이블에는 변경 데이터 피드가 필요합니다. 기본 테이블에서 변경 데이터 피드를 사용하도록 설정하려면 다음 구문을 사용하여 delta.enableChangeDataFeed
테이블 속성을 설정합니다.
ALTER TABLE table1 SET TBLPROPERTIES (delta.enableChangeDataFeed = true);
구체화된 보기에 대한 새로 고침 기록 보기
현재 및 과거 새로 고침을 포함하여 구체화된 보기에서 REFRESH
작업의 상태를 보려면 델타 라이브 테이블 이벤트 로그를 쿼리하세요.
SELECT
*
FROM
event_log(TABLE(<fully-qualified-table-name>))
WHERE
event_type = "update_progress"
ORDER BY
timestamp desc;
<fully-qualified-table-name>
를 카탈로그 및 스키마를 포함하여 구체화된 뷰의 정규화된 이름으로 바꿉니다.
Delta Live Tables 이벤트 로그란?을 참조하세요.
제한 사항
- 컴퓨팅 및 작업 영역 요구 사항은 요구 사항을 참조 하세요.
- 구체화된 뷰는 ID 열 또는 서로게이트 키를 지원하지 않습니다.
- 구체화된 뷰가
NULL
사용 가능 열에 합계 집계를 사용하고 해당 열에NULL
값만 남아 있는 경우 구체화된 뷰의 결과 집계 값은NULL
가 아니라 0이 됩니다. - 구체화된 뷰에서는 변경 데이터 피드 를 읽을 수 없습니다.
- 시간 이동 쿼리는 구체화된 뷰에서 처리되지 않습니다.
- 구체화된 뷰를 지원하는 기본 파일에는 구체화된 뷰 정의에 표시되지 않는 업스트림 테이블의 데이터(개인 식별 가능한 정보 포함)가 포함될 수 있습니다. 이 데이터는 구체화된 뷰의 증분 새로 고침을 지원하기 위해 기본 스토리지에 자동으로 추가됩니다. 구체화된 뷰의 기본 파일은 구체화된 뷰 스키마의 일부가 아닌 업스트림 테이블의 데이터를 노출할 위험이 있으므로 Databricks는 신뢰할 수 없는 다운스트림 소비자와 기본 스토리지를 공유하지 않는 것이 좋습니다. 예를 들어 구체화된 뷰의 정의에
COUNT(DISTINCT field_a)
절이 포함되어 있다고 가정합니다. 구체화된 뷰 정의에는 집계COUNT DISTINCT
절만 포함되지만, 기초 파일에는 실제field_a
값의 목록이 포함됩니다.