다음을 통해 공유


Databricks SQL에서 구체화된 뷰 사용

Important

이 기능은 공개 미리 보기 상태입니다.

이 문서에서는 Databricks SQL에서 구체화된 뷰를 만들고 사용하여 성능을 향상시키고 데이터 처리 및 분석 워크로드 비용을 줄이는 방법을 설명합니다.

구체화된 뷰란?

Databricks SQL에서 구체화된 뷰는 사용자가 원본 테이블의 최신 데이터 버전을 기반으로 결과를 미리 계산할 수 있도록 하는 Unity 카탈로그 관리 테이블입니다. 구체화된 뷰를 쿼리할 때 항상 결과를 업데이트하는 대신 구체화된 뷰를 마지막으로 새로 고칠 때 반환된 결과가 데이터 상태를 반영하기 때문에 Azure Databricks의 구체화된 뷰는 다른 구현과 다릅니다. 구체화된 뷰를 수동으로 새로 고치거나 새로 고침을 예약할 수 있습니다.

구체화된 뷰는 ETL(추출, 변환 및 로드) 처리와 같은 데이터 처리 워크로드에 강력합니다. 구체화된 뷰는 규정 준수, 수정, 집계 또는 CDC(일반 변경 데이터 캡처)를 위해 데이터를 처리하는 간단하고 선언적인 방법을 제공합니다. 구체화된 뷰는 느린 쿼리와 자주 사용되는 계산을 미리 계산하여 비용을 절감하고 쿼리 대기 시간을 개선합니다. 구체화된 뷰는 기본 테이블을 클린, 보강 및 비정규화하여 사용하기 쉬운 변환을 가능하게 합니다. 구체화된 뷰는 간단한 최종 사용자 환경을 제공하면서 비용을 절감할 수 있습니다. 경우에 따라 기본 테이블의 변경 내용을 증분 방식으로 계산할 수 있기 때문입니다.

구체화된 뷰는 델타 라이브 테이블의 출시와 함께 Databricks Data Intelligence 플랫폼에서 처음 지원되었습니다. Databricks SQL 웨어하우스에서 구체화된 뷰를 만들면 구체화된 뷰에 대한 새로 고침을 처리하기 위해 Delta Live Tables 파이프라인이 만들어집니다. Delta Live Tables UI, Delta Live Tables API 또는 Delta Live Tables CLI에서 새로 고침 작업의 상태 모니터링할 수 있습니다. 구체화된 뷰 새로 고침의 상태 보기를 참조하세요.

요구 사항

  • Unity 카탈로그 사용 Databricks SQL 웨어하우스를 사용하여 구체화된 뷰를 만들고 새로 고쳐야 합니다.

  • 작업 영역은 서버리스 사용 지역에 있어야 합니다.

Databricks SQL에서 구체화된 뷰를 사용할 때의 제한 사항에 대해 알아보려면 제한 사항을 참조 하세요.

구체화된 뷰 만들기

구체화된 뷰를 만들려면 문을 사용합니다 CREATE MATERIALIZED VIEW . Databricks SQL 참조에서 CREATE MATERIALIZED VIEW를 참조하세요. create 문을 제출하려면 Azure Databricks UI, Databricks SQL CLI 또는 Databricks SQL APISQL 편집기를 사용합니다.

참고 항목

구체화된 뷰를 만드는 사용자는 구체화된 뷰 소유자이며 다음 권한이 있어야 합니다.

  • SELECT 구체화된 뷰에서 참조하는 기본 테이블에 대한 권한입니다.
  • USE CATALOGUSE SCHEMA 구체화된 뷰에 대한 원본 테이블을 포함하는 카탈로그 및 스키마에 대한 권한
  • USE CATALOGUSE SCHEMA 구체화된 뷰에 대한 대상 카탈로그 및 스키마에 대한 권한
  • CREATE TABLE구체화된 뷰를 포함하는 스키마에 대한 권한과 CREATE MATERIALIZED VIEW

다음 예제에서는 기본 테이블에서 base_table1구체화된 뷰 mv1 를 만듭니다.

CREATE MATERIALIZED VIEW mv1
AS SELECT
  date, sum(sales) AS sum_of_sales
FROM
  table1
GROUP BY
  date;

구체화된 뷰는 어떻게 만들어지나요?

Databricks SQL 구체화된 뷰 CREATE 작업은 Databricks SQL 웨어하우스를 사용하여 구체화된 뷰에서 데이터를 만들고 로드합니다. 구체화된 뷰를 만드는 것은 Databricks SQL 웨어하우스 CREATE MATERIALIZED VIEW 에서 동기 작업이므로 구체화된 뷰가 만들어지고 초기 데이터 로드가 완료될 때까지 명령이 차단됩니다. Delta Live Tables 파이프라인은 모든 Databricks SQL 구체화된 뷰에 대해 자동으로 만들어집니다. 구체화된 뷰를 새로 고치면 Delta Live Tables 파이프라인에 대한 업데이트가 새로 고침을 처리하기 시작합니다.

외부 시스템에서 데이터 로드

Databricks는 지원되는 데이터 원본에 대해 Lakehouse Federation을 사용하여 외부 데이터를 로드하는 것이 좋습니다. Lakehouse Federation에서 지원하지 않는 원본에서 데이터를 로드하는 방법에 대한 자세한 내용은 데이터 형식 옵션을 참조 하세요.

구체화된 뷰 새로 고침

REFRESH 작업은 구체화된 뷰를 새로 고쳐 기본 테이블의 최신 변경 내용을 반영합니다. 구체화된 뷰를 새로 고치려면 문을 REFRESH MATERIALIZED VIEW 사용합니다. Databricks SQL 참조에서 새로 고침(구체화된 뷰 및 스트리밍 테이블)을 참조하세요. refresh 문을 제출하려면 Azure Databricks UI, Databricks SQL CLI 또는 Databricks SQL APISQL 편집기를 사용합니다.

소유자만 구체화된 뷰를 사용할 수 있습니다 REFRESH .

다음 예제에서는 구체화된 뷰를 mv1 새로 고칩니다.

REFRESH MATERIALIZED VIEW mv1;

Databricks SQL 구체화된 뷰는 어떻게 새로 고쳐지나요?

구체화된 뷰는 델타 라이브 테이블 파이프라인을 자동으로 만들고 사용하여 새로 고침 작업을 처리합니다. 새로 고침은 Delta Live Tables 파이프라인에서 관리되므로 구체화된 뷰를 만드는 데 사용되는 Databricks SQL 웨어하우스는 사용되지 않으며 새로 고침 작업 중에 실행될 필요가 없습니다.

Delta Live Tables 파이프라인은 연속 또는 트리거된 실행 모드를 사용합니다. 구체화된 뷰는 실행 모드에서 업데이트할 수 있습니다. 연속 실행 모드에서 작동할 때 불필요한 처리를 방지하기 위해 파이프라인은 종속 델타 테이블을 자동으로 모니터링하고 해당 종속 테이블의 내용이 변경된 경우에만 업데이트를 수행합니다. Delta Live Tables 파이프라인이란?을 참조하세요.

참고 항목

Delta Live Tables 런타임은 델타가 아닌 데이터 원본의 변경 내용을 검색할 수 없습니다. 테이블은 계속 정기적으로 업데이트되지만 과도한 재컴퓨팅으로 인해 컴퓨팅에서 발생하는 증분 처리 속도가 느려지는 것을 방지하기 위해 더 높은 기본 트리거 간격으로 업데이트됩니다.

기본적으로 새로 고침 작업은 동기적으로 수행됩니다. 새로 고침 작업이 비동기적으로 수행되도록 설정할 수도 있습니다. 각 접근 방식과 관련된 동작은 다음과 같습니다.

  • 동기: 동기 새로 고침은 새로 고침 작업이 완료될 때까지 다른 작업을 차단합니다. 이렇게 하면 워크플로와 같은 오케스트레이션 도구에서 새로 고침 작업을 시퀀스할 수 있습니다. 워크플로를 사용하여 구체화된 뷰를 오케스트레이션하려면 SQL 작업 유형을 사용합니다. Azure Databricks 워크플로 소개를 참조 하세요.
  • 비동기: 구체화된 뷰 새로 고침이 시작되고 데이터 로드가 완료되기 전에 명령이 반환될 때 델타 라이브 테이블 컴퓨팅에서 비동기 새로 고침이 백그라운드 작업을 시작합니다. Delta Live Tables 파이프라인은 새로 고침을 관리하므로 구체화된 뷰를 만드는 데 사용되는 Databricks SQL 웨어하우스는 사용되지 않습니다. 새로 고침 작업 중에 실행할 필요가 없습니다.

일부 쿼리는 증분 방식으로 새로 고칠 수 있습니다. 구체화된 뷰는 새로 고침 작업을 참조 하세요. 증분 새로 고침을 수행할 수 없는 경우 전체 새로 고침이 대신 수행됩니다.

구체화된 뷰 새로 고침 예약

정의된 일정에 따라 자동으로 새로 고쳐지도록 Databricks SQL 구체화된 보기를 구성할 수 있습니다. 구체화된 뷰SCHEDULE 만들거나 ALTER VIEW 문을 사용하여 일정을 추가할 때 절을 사용하여 이 일정을 구성합니다. 일정을 만들면 업데이트를 처리하도록 새 Databricks 작업이 자동으로 구성됩니다. 문을 사용하여 언제든지 DESCRIBE EXTENDED 일정을 볼 수 있습니다.

구체화된 뷰의 정의 업데이트

구체화된 뷰의 정의를 업데이트하려면 먼저 삭제한 다음 구체화된 뷰를 다시 만들어야 합니다.

구체화된 뷰 삭제

참고 항목

구체화된 뷰를 삭제하는 명령을 제출하려면 구체화된 뷰의 소유자여야 합니다.

구체화된 뷰를 삭제하려면 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 APISQL 편집기를 사용합니다.

구체화된 뷰 새로 고침의 상태 보기

참고 항목

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에서 파이프라인을 보려면 파이프라인의 파이프라인 세부 정보 페이지에 대한 링크에 직접 액세스해야 합니다. 링크에 액세스하려면 다음을 수행합니다.

활성 새로 고침 중지

Delta Live Tables UI에서 활성 새로 고침을 중지하려면 파이프라인 세부 정보 페이지에서 중지를 클릭하여 파이프라인 업데이트를 중지합니다. 파이프라인 API에서 Databricks CLI 또는 POST /api/2.0/pipelines/{pipeline_id}/stop 작업을 사용하여 새로 고침을 중지 할 수도 있습니다.

구체화된 뷰의 소유자 변경

메타스토어 관리자 및 작업 영역 관리자인 경우 구체화된 뷰의 소유자를 변경할 수 있습니다. 구체화된 뷰는 델타 라이브 테이블 파이프라인을 자동으로 만들고 사용하여 변경 내용을 처리합니다. 구체화된 뷰 소유자를 변경하려면 다음 단계를 사용합니다.

  • 워크플로를 클릭한 작업 아이콘다음 델타 라이브 테이블 탭을 클릭합니다.
  • 소유자를 변경할 파이프라인의 이름을 클릭합니다.
  • 케밥 메뉴 파이프라인 이름 오른쪽에 있는 케밥 메뉴를 클릭하고 사용 권한을 클릭합니다. 그러면 권한 대화 상자가 열립니다.
  • 현재 소유자 이름 오른쪽에 있는 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 보려면 Delta Live Tables 이벤트 로그를 쿼리합니다.

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 이벤트 로그란?을 참조하세요.

증분 또는 전체 새로 고침이 사용되는지 확인

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

기법 증분 새로 고침? 설명
FULL_RECOMPUTE 아니요 구체화된 뷰가 완전히 다시 계산되었습니다.
NO_OP 해당 없음 기본 테이블의 변경 내용이 검색되지 않아 구체화된 뷰가 업데이트되지 않았습니다.
ROW_BASED 또는 PARTITION_OVERWRITE 구체화된 뷰는 지정된 기술을 사용하여 증분 방식으로 새로 고쳐집니다.

사용되는 기술을 확인하려면 Delta Live Tables 이벤트 로그를 쿼리합니다. 여기서는 다음과 같습니다 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> 니다.

Delta Live Tables 이벤트 로그란?을 참조하세요.

제한 사항

  • MV를 관리하는 방법과 쿼리할 수 있는 위치에 대한 제한 사항이 있습니다.

    • Databricks SQL 구체화된 뷰는 pro SQL Warehouse 및 서버리스 SQL 웨어하우스에서만 만들고 새로 고칠 수 있습니다.
    • Databricks SQL 구체화된 뷰는 만든 작업 영역에서만 새로 고칠 수 있습니다.
    • Databricks SQL 구체화 뷰는 Databricks SQL 웨어하우스, 델타 라이브 테이블 및 Databricks Runtime 11.3 이상을 실행하는 공유 클러스터에서만 쿼리할 수 있습니다. 단일 사용자 액세스 모드 클러스터에서 구체화된 뷰를 쿼리할 수 없습니다.
  • 구체화된 뷰는 ID 열 또는 서로게이트 키를 지원하지 않습니다.

  • 구체화된 뷰에서 사용 가능한 열에 대한 NULL합계 집계를 사용하고 해당 열에서 값만 NULL 다시 기본 경우 구체화된 뷰 결과 집계 값은 0이 아닌 NULL0입니다.

  • 구체화된 뷰를 지원하는 기본 파일에는 구체화된 뷰 정의에 표시되지 않는 업스트림 테이블(개인 식별 가능한 정보 포함)의 데이터가 포함될 수 있습니다. 이 데이터는 구체화된 뷰의 증분 새로 고침을 지원하기 위해 기본 스토리지에 자동으로 추가됩니다. 구체화된 뷰의 기본 파일은 구체화된 뷰 스키마의 일부가 아닌 업스트림 테이블의 데이터를 노출할 위험이 있으므로 Databricks는 신뢰할 수 없는 다운스트림 소비자와 기본 스토리지를 공유하지 않는 것이 좋습니다. 예를 들어 구체화된 뷰의 정의에 절이 포함되어 있다고 COUNT(DISTINCT field_a) 가정합니다. 구체화된 뷰 정의에 집계 COUNT DISTINCT 절만 포함되더라도 기본 파일에는 실제 값 field_a목록이 포함됩니다.

  • Databricks SQL 구체화된 뷰는 미국 중남부 및 미국 서부 2 지역에서 지원되지 않습니다.