Databricks SQL에서 구체화된 views 사용
이 문서에서는 Databricks SQL에서 구체화된 views 만들고 사용하여 성능을 향상시키고 데이터 처리 및 분석 워크로드 비용을 줄이는 방법을 설명합니다.
참고 항목
구체화된 뷰에서 Azure Private Link 연결을 사용해야 하는 경우 Databricks 담당자에게 문의하세요.
Important
Databricks SQL에서 생성된 물리적 views는 서버리스 Delta Live Tables 파이프라인을 기반으로 합니다. 이 기능을 사용하려면 작업 영역에서 서버리스 파이프라인을 지원해야 합니다.
구체화된 views무엇인가요?
Databricks SQL에서 구체화된 views은 최신 버전의 원본 tables데이터를 기반으로 결과를 사전 계산할 수 있게 하는 Unity Catalog에 의해 관리되는 tables입니다. Azure Databricks에서의 구체화된 views는 다른 구현과 다릅니다. 이는 구체화된 뷰를 쿼리할 때마다 결과가 항상 업데이트되는 것이 아니라, 마지막으로 새로 고침된 시점의 데이터 상태를 반영하는 결과를 반환하기 때문입니다. 구체화된 views 수동으로 refresh 새로 고침을 예약할 수 있습니다.
구체화된 views ETL(추출, 변환 및 로드) 처리와 같은 데이터 처리 워크로드에 강력합니다. 구체화된 views 규정 준수, 수정, 집계 또는 CDC(일반 변경 데이터 캡처)를 위해 데이터를 처리하는 간단하고 선언적인 방법을 제공합니다. 자주 사용되는 계산과 느린 쿼리를 미리 계산하여 비용을 절감하고 쿼리 지연 시간을 개선하기 위해 views가 활용되었습니다. 구체화된 views은 기본 tables을 정리하고, 보강하며, 비정규화하여 사용하기 쉬운 변환을 가능하게 합니다. 구체화된 views는 간단한 최종 사용자 환경을 제공하면서 비용을 절감할 수 있습니다. 경우에 따라 기본 tables의 변경 사항을 점진적으로 계산할 수 있기 때문입니다.
Azure Databricks에서 처음으로 구체화된 views이(가) Delta Live Tables출시에 따라 지원되었습니다. Databricks SQL 웨어하우스 에서 구체화된 뷰를 만들면 구체화된 뷰로 새로 고침을 처리하기 위해 서버리스 파이프라인 이 만들어집니다. refresh 작업의 상태를 Delta Live Tables UI 또는 파이프라인 API에서 모니터링할 수 있습니다. 을(를) 참조하여 구체화된 뷰 refresh의 상태를 확인하세요.
요구 사항
구체화된 views만들거나 refresh:
Unity Catalog사용 가능한 pro 또는 서버리스 SQL 웨어하우스를 사용해야 합니다.
구체화된 뷰에서 refresh 작업을 수행하려면, 해당 뷰를 생성한 작업 영역에 있어야 합니다.
작업 공간은 서버리스 SQL Warehouse를 지원하는 지역에 있어야 합니다.
구체화된 views를 쿼리하려면:
- 구체화된 뷰의 소유자이거나 구체화된 뷰에
SELECT
가 있고 부모에USE SCHEMA
및USE CATALOG
가 있어야 합니다. - 다음 컴퓨팅 리소스 중 하나를 사용해야 합니다.
- SQL Warehouse
- Delta Live Tables 인터페이스
- 공유 액세스 모드 컴퓨팅
- 작업 영역이 서버리스 컴퓨팅에 사용하도록 설정된 한 Databricks Runtime 15.4 이상의 단일 사용자 액세스 모드입니다. 단일 사용자 컴퓨팅에 대한 세분화된 액세스 제어를 참조 하세요.
- 구체화된 뷰 소유자인 경우에만 14.3에서 15.3 사이의 Databricks 런타임을 실행하는 단일 사용자 액세스 모드 컴퓨팅 리소스입니다.
구체화된 views사용에 대한 다른 제한 사항에 대해 알아보려면 제한 사항참조하세요.
구체화된 뷰 만들기
Databricks SQL 구체화된 뷰 CREATE
작업은 Databricks SQL Warehouse를 사용하여 구체화된 뷰에서 데이터를 만들고 로드합니다. 구체화된 뷰를 만드는 것은 동기 작업입니다. 즉, 구체화된 뷰가 만들어지고 초기 데이터 로드가 완료될 때까지 CREATE MATERIALIZED VIEW
명령이 차단됩니다. Databricks SQL의 모든 구체화된 뷰에 대해 서버리스 Delta Live Tables 파이프라인이 자동으로 생성됩니다. 구체화된 뷰가 새로 고쳐지면 Delta LiveTables 파이프라인이 refresh처리합니다.
구체화된 뷰를 만들려면 CREATE MATERIALIZED VIEW
문을 사용합니다. create 문을 제출하려면 Azure Databricks UI, Databricks SQL CLI 또는 Databricks SQL API의 SQL 편집기를 사용합니다.
참고 항목
구체화된 뷰를 만드는 사용자는 구체화된 뷰 소유자이며 다음 권한이 있어야 합니다.
- 구체화된 뷰가 참조하는 기본 tables에 대한
SELECT
권한입니다. - 구체화된 뷰의 원본 tables를 포함하는 catalog 및 schema에 대한
USE CATALOG
및USE SCHEMA
권한. - 구체화된 뷰의 대상 catalog 및 schema에 대한
USE CATALOG
및USE SCHEMA
권한. -
schema에 포함된 구체화된 뷰에 대한
CREATE TABLE
및CREATE MATERIALIZED VIEW
의 권한.
다음 예제에서는 기본 tablebase_table1
에서 구체화된 뷰 mv1
를 생성합니다.
CREATE MATERIALIZED VIEW mv1
AS SELECT
date,
sum(sales) AS sum_of_sales
FROM
base_table1
GROUP BY
date;
기본 table의 Column 주석은 새로운 구체화 뷰로 자동으로 전달됩니다. 일정, table 제약 조건 또는 기타 속성을 추가하려면 구체화된 뷰 정의를 수정합니다. 구체화된 뷰를 정의하기 위한 구문 세부 정보를 알아보려면 CREATE MATERIALIZED VIEW참조하세요.
런타임 채널 Set
SQL 웨어하우스를 사용하여 생성된 구체화된 views는 Delta Live Tables 파이프라인을 통해 자동으로 새로 고쳐집니다. Delta Live Tables 파이프라인은 기본적으로 current
채널에서 런타임을 사용합니다. 릴리스 프로세스에 대한 자세한 내용은 Delta Live Tables 릴리스 정보 및 릴리스 업그레이드 프로세스 참조하세요.
Databricks는 프로덕션 워크로드에 current
채널을 사용하는 것이 좋습니다. 새로운 기능이 채널에 preview
처음 릴리스됩니다.
preview
를 table 속성으로 지정하여 파이프라인을 사전보기 Delta Live Tables 채널에 set하여 새 기능을 테스트할 수 있습니다.
table 만들 때 또는 ALTER 문을 사용하여 table 만든 후에 이 속성을 지정할 수 있습니다.
다음 코드 예제는 CREATE 문에서 채널을 미리 보기로 설정하는 방법을 set로 보여 줍니다.
CREATE OR REPLACE MATERIALIZED VIEW foo.default.bar
TBLPROPERTIES ('pipelines.channel' = 'preview') as
SELECT
*
FROM
range(5)
외부 시스템에서 데이터 로드
Databricks는 지원되는 데이터 원본에 대해 Lakehouse Federation을 사용하여 외부 데이터를 로드하는 것이 좋습니다. Lakehouse Federation에서 지원하지 않는 원본에서 데이터를 로드하는 방법에 대한 자세한 내용은 데이터 형식 옵션을 참조하세요.
구체화된 뷰 Refresh
REFRESH
작업은 기본 table의 최신 변경 내용을 반영하여 구체화된 뷰를 새로 고칩니다. 이 작업은 기본적으로 동기적으로 수행됩니다. 즉, refresh 작업이 완료될 때까지 명령이 차단됩니다. 구체화된 뷰를 refresh하려면 REFRESH MATERIALIZED VIEW
문을 사용하십시오. 이 명령에 대한 SQL 구문 및 parameters 대한 자세한 내용은 REFRESH(MATERIALIZED VIEW 또는 STREAMING TABLE) 참조하세요. 증분 방식으로 새로 고칠 수 있는 구체화된
refresh 문을 제출하려면 Azure Databricks UI의 SQL 편집기, SQL 웨어하우스에 연결된 Notebook, Databricks SQL CLI또는 Databricks SQL API를 사용하세요.
소유자만 구체화된 뷰를 REFRESH
할 수 있습니다.
다음 예제는 mv1
구체화된 뷰를 새로 고치는 예제입니다:
REFRESH MATERIALIZED VIEW mv1;
Databricks SQL 구체화 views 어떻게 새로 고쳐지나요?
서버리스 Delta Live Tables 파이프라인을 자동으로 생성하고 사용하여 refresh 작업을 처리하는 Materialized views입니다. refresh은 Delta Live Tables 파이프라인에서 관리되고 있으며, update는 구체화된 뷰를 생성하는 데 사용되는 Databricks SQL 웨어하우스에서 모니터링되고 있습니다. Delta Live Tables 파이프라인은 일정에 따라 실행되며 이를 사용하여 구체화된 views를 업데이트할 수 있습니다. 트리거된 파이프라인 모드와 연속 파이프라인 모드를 참조하세요.
참고 항목
Delta Live Tables 런타임은 델타가 아닌 데이터 원본의 변경 내용을 검색할 수 없습니다. table 계속 정기적으로 업데이트되지만 과도한 재컴퓨팅으로 인해 컴퓨팅에서 발생하는 증분 처리 속도가 느려지는 것을 방지하기 위해 더 높은 기본 트리거 간격으로 업데이트됩니다.
기본적으로 refresh 작업은 동기적으로 수행됩니다. 비동기적으로 refresh 작업을 수행하려면 set을/를 사용할 수 있습니다. refresh 명령을 사용하여 set 할 수 있습니다. REFRESH(MATERIALIZED VIEW 또는 STREAMING TABLE) 각 접근 방식과 관련된 동작은 다음과 같습니다.
- 동기: 동기 refresh가 refresh 완료될 때까지 다른 작업이 진행되지 않도록 방지합니다. 필요한 경우, Databricks 작업과 같은 오케스트레이션 도구에서 refresh 작업을 시퀀싱할 때와 같이 다음 단계에 결과가 필요하다면 동기적 refresh을 사용해야 합니다. 구체화된 views 작업으로 오케스트레이션하려면 SQL 작업 유형을 사용합니다. 워크플로 예약 및 오케스트레이션을 참조하세요.
- 비동기: 구체화된 뷰 refresh 시작될 때 델타 라이브 Tables 컴퓨팅에서 비동기 refresh 백그라운드 작업을 시작하여 데이터 로드가 완료되기 전에 명령을 반환할 수 있습니다. 이 refresh 유형은 명령이 where에서 시작되더라도 웨어하우스에 컴퓨팅 용량을 보유할 필요가 없으므로 비용을 절감할 수 있습니다. refresh가 유휴 상태가 되고 다른 작업이 실행되지 않으면, refresh이 다른 사용 가능한 컴퓨팅을 사용하는 동안 웨어하우스가 종료될 수 있습니다. 또한 비동기 새로 고침은 여러 작업을 병렬로 시작할 수 있습니다.
일부 쿼리는 증분 방식으로 새로 고칠 수 있습니다. 구체화된
구체화된 뷰 새로 고침 예약
Databricks SQL 구체화된 뷰를 구성하여 정의된 일정에 따라 자동으로 refresh 수 있습니다. 일정 설정을 위해 set 다음 중 하나를 수행합니다.
-
SCHEDULE
절을 사용하여 일정을 구성합니다. - ALTER MATERIALIZED VIEW 문을 사용하여 일정을 추가합니다.
일정을 만들면 update처리하도록 새 Databricks 작업이 자동으로 구성됩니다.
일정을 보려면 다음 중 하나를 수행하세요.
- Azure Databricks UI의 SQL 편집기에서
DESCRIBE EXTENDED
문을 실행합니다. - Catalog 탐색기를 사용하여 구체화된 뷰를 봅니다. 일정은 개요 탭의 Refresh 상태나열됩니다. 무엇이 Catalog 탐색기입니까?참조하세요.
구체화된 뷰의 상태 보기 refresh
참고 항목
Delta Live Tables 파이프라인은 구체화된 뷰 새로 고침을 관리하므로 파이프라인의 시작 시간으로 인해 지연이 발생합니다. 이 시간은 refresh수행하는 데 필요한 시간 외에도 초에서 분 단위로 표시될 수 있습니다.
Delta Live Tables UI에서 구체화된 뷰를 관리하는 파이프라인을 보거나, 구체화된 뷰에 대한 DESCRIBE EXTENDED
명령에서 반환된 Refresh 정보를 확인하여 구체화된 뷰 refresh의 상태를 볼 수 있습니다.
Delta Live Tables 이벤트 로그를 쿼리하여 구체화된 뷰의 refresh 기록을 볼 수도 있습니다. 을(를) 참조하여 구체화된 뷰의 refresh 기록을 보십시오.
쿼리 기록을 사용하여 실행 모니터링
쿼리 기록 페이지를 사용하여 스트리밍 table 업데이트를 실행하는 데 사용되는 Delta Live Tables 파이프라인에서 성능이 저조한 쿼리 및 병목 상태를 식별하는 데 도움이 되는 쿼리 세부 정보 및 쿼리 프로필에 액세스할 수 있습니다. 쿼리 기록 및 쿼리 프로필에 사용할 수 있는 정보의 종류에 대한 개요는 쿼리 기록 및 쿼리 프로필을 참조하세요.
Important
이 기능은 공개 미리 보기 상태입니다. 작업 영역 관리자는 미리 보기 페이지에서 이 기능을 사용하도록 설정할 수 있습니다 . Azure Databricks 미리 보기 관리를 참조하세요.
구체화된 views와 관련된 모든 진술은 쿼리 기록에 나타납니다.
문 드롭다운 필터를 사용하여 명령을 select하고, 관련된 쿼리를 검사할 수 있습니다. 모든 CREATE
문 뒤에는 Delta Live Tables 파이프라인에서 비동기적으로 실행되는 REFRESH
문이 있습니다. 이 문에는 REFRESH
일반적으로 성능 최적화에 대한 인사이트를 제공하는 자세한 쿼리 계획이 포함됩니다.
쿼리 기록 UI의 문에 액세스 REFRESH
하려면 다음 단계를 사용합니다.
- 왼쪽 사이드바를 클릭하여 쿼리 기록 UI를 엽니다.
- 명세서 드롭다운 필터에서 Select에 REFRESH 확인란을 선택하십시오.
- 쿼리 문 이름을 클릭하여 쿼리 기간 및 집계 메트릭과 같은 요약 세부 정보를 봅니다.
- 쿼리 프로필 보기를 클릭하여 쿼리 프로필을 엽니다. 쿼리 프로필 탐색에 대한 자세한 내용은 쿼리 프로필을 참조하세요.
- 필요에 따라 쿼리 원본 섹션의 링크를 사용하여 관련 쿼리 또는 파이프라인을 엽니다.
참고 항목
미리 보기 채널을 사용하여 실행되도록 구체화된 뷰를 구성해야 합니다. Set, 런타임 채널을(를) 참조하세요.
CREATE MATERIALIZED VIEW을 참조하십시오.
Delta Live Tables UI에서 refresh 상태 보기
기본적으로 구체화된 뷰를 관리하는 Delta Live Tables 파이프라인은 Delta Live Tables UI에 표시되지 않습니다. Delta Live Tables UI에서 파이프라인을 보려면 파이프라인의 파이프라인 세부 정보 페이지에 대한 링크에 직접 액세스해야 합니다. 링크에 액세스하려면
-
DESCRIBE EXTENDED
문에서 반환된 tableLatest Refresh 행에 표시된 링크를 복사하여 붙여넣습니다. - 구체화된 보기의 계보 탭에서 파이프라인을 클릭한 다음 파이프라인 링크를 클릭합니다.
Azure Databricks UI의 SQL 편집기를 사용하여 제출된 비동기 REFRESH
명령의 경우 결과 패널에 표시된 링크에 따라 refresh 상태를 볼 수 있습니다.
활성 상태를 refresh 멈추기
Delta Live Tables UI에서 활성 refresh 중지하려면 파이프라인 세부 정보 페이지에서 중지 클릭하여 파이프라인 update중지합니다. Databricks CLI 또는 POST /api/2.0/pipelines/{pipeline_id}/pipelines API에서 작업을 중지하여 refresh 중지할 수도 있습니다.
구체화된 뷰의 정의 Update
구체화된 뷰 정의를 update하기 위해, 먼저 삭제한 다음에 구체화된 뷰를 다시 만들어야 합니다.
구체화된 뷰를 삭제합니다.
참고 항목
구체화된 뷰를 삭제하는 명령을 제출하려면 구체화된 뷰의 소유자이거나 구체화된 뷰에 대한 MANAGE
권한이 있어야 합니다.
구체화된 뷰를 삭제하려면 DROP VIEW 문을 사용합니다.
DROP
문을 제출하려면 Azure Databricks UI, Databricks SQL CLI 또는 Databricks SQL API에서 SQL 편집기를 사용할 수 있습니다. 다음 예제는 mv1
구체화된 뷰를 드롭합니다:
DROP MATERIALIZED VIEW mv1;
구체화된 뷰 설명
구체화된 뷰에 대한 columns 및 데이터 형식을 검색하려면 DESCRIBE
문을 사용합니다. 구체화된 뷰의 소유자, 위치, 생성 시간 및 refresh 상태와 같은 columns, 데이터 형식 및 메타데이터를 검색하려면 DESCRIBE EXTENDED
사용합니다.
DESCRIBE
문을 제출하려면 Azure Databricks UI, Databricks SQL CLI 또는 Databricks SQL API의 SQL 편집기를 사용합니다.
구체화된 뷰의 소유자 변경
메타스토어 관리자 및 작업 영역 관리자 모두인 경우 구체화된 뷰의 소유자를 변경할 수 있습니다. 구체화된 views은(는) Delta Live Tables 파이프라인을 자동으로 생성하고 사용하여 변경 사항을 처리합니다. 구체화된 views 소유자를 변경하려면 다음 단계를 사용합니다.
- 구체화된 보기의 계보 탭에서 파이프라인을 클릭한 다음 파이프라인 링크를 클릭합니다.
- 파이프라인 이름 오른쪽에 있는 kebab 메뉴를 클릭하고 권한을 클릭합니다. 그러면 권한 대화 상자가 열립니다.
- 현재 소유자의 이름 오른쪽에 있는 x 클릭하여 현재 소유자를 remove.
- 입력을 시작하여 사용 가능한 사용자를 list로 필터링하세요. 새 파이프라인 소유자여야 하는 사용자를 클릭합니다.
- 저장을 클릭하여 변경 사항을 저장하고 대화 상자를 닫습니다.
파이프라인에 정의된 구체화된 views 포함한 모든 파이프라인 자산은 새 파이프라인 소유자가 소유합니다. 이후의 모든 업데이트는 새 소유자의 ID를 사용하여 실행됩니다.
구체화된 views에 대한 액세스 제어
구체화된 views는 잠재적으로 개인 데이터를 노출시키지 않으면서 데이터 공유를 지원하기 위해 풍부한 액세스 제어를 지원합니다. 구체화된 뷰 소유자 또는 MANAGE
권한을 가진 사용자는 다른 사용자에게 권한을 grantSELECT
할 수 있습니다.
SELECT
액세스 권한이 있는 사용자는 구체화된 뷰에서 참조하는 tables에 대한 SELECT
액세스 권한이 필요하지 않습니다. 이 액세스 제어를 사용하면 기본 데이터에 대한 액세스를 제어하면서 데이터 공유를 사용할 수 있습니다.
Grant 권한을 구체화된 뷰에 설정
구체화된 뷰에는 grant 액세스를 위해 GRANT
문을 사용합니다.
GRANT
privilege_type [, privilege_type ] ...
ON <mv_name> TO principal;
privilege_type은 다음과 같을 수 있습니다:
-
SELECT
- 사용자가 구체화된 뷰를SELECT
로 지정할 수 있습니다. -
REFRESH
- 사용자가 구체화된 뷰를REFRESH
로 지정할 수 있습니다. 새로 고침은 소유자의 권한을 사용하여 실행됩니다.
다음 예제에서는 구체화된 뷰를 만들고 사용자에게 select 및 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에 액세스하려면 REVOKE
문을 사용하십시오.
REVOKE
privilege_type [, privilege_type ]
ON <name> FROM principal;
구체화된 뷰 소유자나 그 뷰에 대해 MANAGE
또는 SELECT
권한이 부여된 다른 사용자에게서 기본 table에 대한 SELECT
권한이 취소되거나 기본 table가 삭제된 경우에도, 구체화된 뷰 소유자 또는 권한을 받은 사용자는 여전히 구체화된 뷰를 쿼리할 수 있습니다. 그러나 다음과 같은 동작이 발생합니다.
- 구체화된 뷰 소유자 또는 구체화된 뷰에 대한 액세스 권한을 잃은 다른 사용자는 더 이상 해당 구체화된 뷰를
REFRESH
표시할 수 없으며, 해당 구체화된 뷰는 오래된 뷰가 됩니다. - 일정으로 자동화된 경우 다음 예약된
REFRESH
는 실패하거나 실행되지 않습니다.
다음 예는 SELECT
로부터 mv1
권한을 취소하는 예입니다:
REVOKE SELECT ON mv1 FROM user1;
변경 데이터 피드의 사용
특정 고급 사용 사례를 제외하고, views 자료화된 기본 데이터 tables에는 변경된 데이터 피드가 필요합니다. 기본 table변경 데이터 피드를 사용하도록 설정하려면 다음 구문을 사용하여 delta.enableChangeDataFeed
table 속성을 set.
ALTER TABLE table1 SET TBLPROPERTIES (delta.enableChangeDataFeed = true);
구체화된 뷰에 대한 refresh 기록 보기
구체화된 뷰에서 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>
을 catalog 및 schema를 포함하는 구체화된 뷰의 정식 이름으로 교체합니다.
Delta Live Tables 이벤트 로그란 무엇입니까?참조하세요.
제한 사항
- 컴퓨팅 및 작업 영역 요구 사항은 요구 사항을 참조 하세요.
- 구체화된 views는 식별자 columns 또는 서로게이트 키를 지원하지 않습니다.
- 구체화된 뷰가
NULL
처리 가능한 column에 대한 합계 집계를 사용할 때, 해당 column에 남아 있는 것이NULL
values뿐이라면, 구체화된 views의 결과 집계 값은NULL
이 아닌 0이 됩니다. - 구체화된 뷰에서는 변경 데이터 피드 를 읽을 수 없습니다.
- 시간 이동 쿼리는 구체화된 views에서 지원되지 않습니다.
- 구체화된 views를 지원하는 기본 파일에는 구체화된 뷰 정의에 나타나지 않는 업스트림 tables의 데이터(개인 식별 가능 정보 포함)가 포함될 수 있습니다. 이 데이터는 구현된 views의 점진적 새로 고침을 지원하기 위해 기본 스토리지에 자동으로 추가됩니다. 기본 파일은 구체화된 뷰 schema에 포함되지 않은 업스트림 tables 데이터를 노출할 위험이 있으므로, Databricks는 신뢰할 수 없는 다운스트림 소비자와 기본 스토리지를 공유하지 않는 것을 권장합니다. 예를 들어 구체화된 뷰의 정의에
COUNT(DISTINCT field_a)
절이 포함되어 있다고 가정합니다. 구체화된 뷰 정의에 집계COUNT DISTINCT
절만 포함되더라도, 기본 파일에는field_a
의 실제 values가 list을 포함합니다.