구체화된 뷰 소개
구체화된 뷰는 SQL 쿼리 결과를 주기적으로 저장하는 미리 계산된 뷰입니다. 일부 사용 사례에서 구체화된 뷰는 각 쿼리에 대해 스캔할 데이터의 양을 줄여 총 처리 시간과 관련 요금을 줄입니다. 다른 데이터 리소스와 마찬가지로 구체화된 뷰를 쿼리할 수 있습니다.
다음 사용 사례는 구체화된 뷰의 가치를 강조해서 보여줍니다.
- 데이터 사전 처리 집계, 필터, 조인, 클러스터를 준비하여 쿼리 성능을 개선합니다.
- 대시보드 가속화 동일한 집계 측정항목(예: 일일 활성 사용자)을 자주 쿼리하는 Looker와 같은 BI 도구를 지원합니다.
- 대규모 스트림의 실시간 분석 고속 스트리밍 데이터를 수신하는 테이블에 대해 더 빠른 응답을 제공할 수 있습니다.
- 비용 관리 대규모 데이터 세트에 대한 반복적이고 비용이 많이 드는 쿼리의 비용을 줄입니다.
구체화된 뷰의 주요 특징은 다음과 같습니다.
- 유지보수 불필요. 기본 테이블이 변경되면 구체화된 뷰가 백그라운드에서 미리 계산됩니다. 기본 테이블의 모든 증분된 데이터 변경사항은 사용자 작업 없이도 구체화된 뷰에 자동으로 추가됩니다.
- 최신 데이터. 구체화된 뷰는 최신 데이터를 반환합니다. 기본 테이블 변경사항으로 인해 구체화된 뷰가 무효화될 경우 기본 테이블에서 데이터를 직접 읽습니다. 기본 테이블 변경사항으로 인해 구체화된 뷰가 무효화되지 않으면 구체화된 뷰에서 나머지 데이터를 읽고 기본 테이블에서 변경사항만 읽습니다.
- 스마트 조정. 구체화된 뷰를 쿼리하여 기본 테이블에 대한 쿼리 중 일부를 확인할 수 있으면 성능 및 효율성 개선을 위해 구체화된 뷰를 사용하도록 BigQuery가 쿼리 경로를 다시 지정합니다. 스마트 조정이 쿼리를 개선하는 방법과 시기에 대한 자세한 내용은 구체화된 뷰 사용을 참고하세요.
증분 및 비증분 구체화된 뷰
구체화된 뷰에는 두 가지 기본 종류가 있습니다.
- 증분 구체화된 뷰는 제한된 기능 집합을 지원합니다. 구체화된 뷰에 지원되는 SQL 구문에 대해 자세히 알아보려면 구체화된 뷰 만들기를 참고하세요. 증분 구체화된 뷰만 스마트 미세 조정을 활용할 수 있습니다.
- 비증분 함수는 증분 구체화된 뷰에서 지원하지 않는 대부분의 구문을 지원합니다.
구체화된 뷰를 만들 때 기본적으로 BigQuery에서는 증분 쿼리를 기반으로 하는 뷰만 만들 수 있습니다. 비증분 뷰를 만들려면 구체화된 뷰의 정의에 allow_non_incremental_definition = true를 지정하면 됩니다.
사용할 최적의 구체화된 뷰 유형은 상황에 따라 다릅니다. 다음 표에서는 증분 구체화된 뷰와 비증분 구체화된 뷰의 기능을 비교합니다.
| 카테고리 | 증분 | 증가하지 않음 |
|---|---|---|
| 지원되는 쿼리 | 제한적 이용 | 대부분의 쿼리 |
| 유지보수 비용 | 자주 사용되는 쿼리의 비용을 줄일 수 있습니다. 구체화된 뷰가 업데이트되는 방법을 알아보려면 증분 업데이트를 참고하세요. | 새로고침할 때마다 전체 쿼리가 실행됩니다. |
| 스마트 조정 지원 | 대부분의 뷰 쿼리에서 지원됩니다. | 아니요 |
| 항상 최신 결과 | 지원됨 증분 뷰는 마지막 새로고침 이후 기본 테이블이 변경된 경우에도 최신 쿼리 결과를 반환합니다. | 아니요 |
승인된 구체화된 뷰
승인된 구체화된 뷰를 만들어 소스 데이터 세트의 데이터 하위 집합을 보조 데이터 세트의 뷰에 공유할 수 있습니다. 그런 다음 공유된 데이터를 볼 수 있는 특정 사용자 및 그룹(주 구성원)과 이 뷰를 공유할 수 있습니다. 주 구성원은 뷰에서 제공된 데이터를 쿼리할 수 있지만 소스 데이터 세트에 직접 액세스할 수는 없습니다.
승인된 뷰와 승인된 구체화된 뷰는 동일한 방식으로 승인됩니다. 자세한 내용은 승인된 뷰를 참조하세요.
다른 BigQuery 기능과 상호작용
다음 BigQuery 기능은 구체화된 뷰에서 투명하게 작동합니다.
쿼리 계획 설명: 쿼리 계획에는 스캔되는 구체화된 뷰(있는 경우)가 무엇인지 반영되고 구체화된 뷰 및 결합된 기본 테이블에서 읽은 바이트 수가 표시됩니다.
쿼리 캐싱: BigQuery가 구체화된 뷰를 사용하여 다시 작성하는 쿼리 결과는 일반적인 제한(결정적 함수 사용, 기본 테이블에 대한 스트리밍 없음 등)에 따라 캐시될 수 있습니다.
비용 제한: 청구되는 최대 바이트 수 값이 설정되었고, 쿼리가 이 제한을 벗어나서 더 많은 바이트 수를 읽을 경우에는 쿼리에 구체화된 뷰, 기본 테이블 또는 둘 다 사용되는지 여부에 관계없이 비용이 발생하지 않고 쿼리가 실패합니다.
테스트 실행을 사용한 비용 예상: 테스트 실행에서는 사용 가능한 구체화된 뷰를 사용해서 쿼리 재작성 로직을 반복하고 비용 예상을 제공합니다. 이 기능을 사용하면 특정 쿼리가 구체화된 뷰를 사용하는지 여부를 테스트하는 방법으로 사용할 수 있습니다.
BigLake 메타데이터 캐시 지원 테이블
BigLake 메타데이터 캐시 지원 테이블을 통한 구체화된 뷰는 Cloud Storage 및 Amazon Simple Storage Service(Amazon S3)에 저장된 구조화된 데이터를 참조할 수 있습니다. 이 구체화된 뷰는 자동 새로고침 및 스마트 조정의 이점을 포함하여 BigQuery 관리형 스토리지 테이블에 대한 구체화된 뷰처럼 작동합니다. 다른 이점으로는 BigQuery 외부에 저장된 데이터의 사전 집계, 사전 필터링, 사전 조인이 있습니다. BigLake 테이블에 대한 구체화된 뷰는 BigQuery 관리형 스토리지에 저장되며 BigQuery 관리형 스토리지의 모든 특성을 포함합니다.
Amazon S3 BigLake 테이블을 통해 구체화된 뷰를 만드는 경우 BigQuery 데이터와의 조인에 구체화된 뷰의 데이터를 사용할 수 없습니다. 조인에 구체화된 뷰의 Amazon S3 데이터를 사용하려면 구체화된 뷰의 복제본을 만듭니다. 승인된 구체화된 뷰를 기반으로만 구체화된 뷰 복제본을 만들 수 있습니다.
제한사항
- 기본 테이블 참조 한도 및 기타 제한사항이 적용될 수 있습니다. 구체화된 뷰 한도에 대한 자세한 내용은 할당량 및 한도를 참조하세요.
- 구체화된 뷰 데이터는
COPY,EXPORT,LOAD,WRITE또는 데이터 조작 언어(DML) 문과 같은 작업을 사용하여 직접 업데이트하거나 조작할 수 없습니다. - 동일한 이름의 구체화된 뷰로 기존 구체화된 뷰를 바꿀 수 없습니다.
- 구체화된 뷰가 생성된 후에는 구체화된 뷰 SQL을 업데이트할 수 없습니다.
- 구체화된 뷰는 기본 테이블과 동일한 조직에 있어야 하고 프로젝트가 조직에 속하지 않는 경우에는 동일한 프로젝트에 있어야 합니다.
- 구체화된 뷰는 제한된 SQL 문법과 제한된 집계 함수 집합을 사용합니다. 자세한 내용은 지원되는 구체화된 뷰를 참조하세요.
- 구체화된 뷰는 다른 구체화된 뷰 위에 중첩될 수 없습니다.
- 구체화된 뷰는 외부 또는 와일드 카드 테이블, 논리적 뷰1 또는 스냅샷을 쿼리할 수 없습니다.
- 구체화된 뷰에는 GoogleSQL 언어만 지원됩니다.
- 구체화된 뷰에 대한 설명을 설정할 수 있지만 구체화된 뷰의 개별 열에 대한 설명은 설정할 수 없습니다.
- 구체화된 뷰를 먼저 삭제하지 않고 기본 테이블을 삭제하면 구체화된 뷰에 대한 쿼리와 새로고침이 실패합니다. 기본 테이블을 다시 만들려면 구체화된 뷰도 다시 만들어야 합니다.
- 구체화된 뷰에 변경 데이터 캡처가 사용 설정된 기본 테이블이 있는 경우 해당 테이블은 구체화된 뷰와 동일한 쿼리에서 참조할 수 없습니다.
- 비증분 구체화된 뷰만 Spanner 외부 데이터 세트 기본 테이블을 가질 수 있습니다.
비증분 구체화된 뷰의 마지막 새로고침이
max_staleness간격 밖에서 발생하면 쿼리가 기본 Spanner 외부 데이터 세트 테이블을 읽습니다. Spanner 외부 데이터 세트 테이블에 대해 자세히 알아보려면 Spanner 외부 데이터 세트 위에 구체화된 뷰 만들기를 참고하세요.
1논리적 뷰 참조 지원은 미리보기 버전입니다. 자세한 내용은 논리적 뷰 참조를 참조하세요.
BigLake 테이블에 대한 구체화된 뷰의 제한사항
- 구체화된 뷰의 파티셔닝은 지원되지 않습니다. 기본 테이블에서는 Hive 파티셔닝을 사용할 수 있지만 구체화된 뷰 스토리지는 BigLake 테이블에서 파티션을 나눌 수 없습니다. 즉, 기본 테이블이 삭제되면 구체화된 뷰가 완전히 새로고침됩니다. 자세한 내용은 증분 업데이트를 참조하세요.
- 구체화된 뷰의
--max_staleness옵션 값이 BigLake 기본 테이블의 값보다 커야 합니다. - BigQuery 관리형 테이블과 BigLake 테이블 간의 조인은 단일 구체화된 뷰 정의에서 지원되지 않습니다.
- BigQuery BI Engine은 BigLake 테이블을 기반으로 한 구체화된 뷰의 가속을 지원하지 않습니다.
구체화된 뷰 가격 책정
비용은 구체화된 뷰의 다음 측면과 관련이 있습니다.
- 구체화된 뷰 쿼리
- 구체화된 뷰를 새로고침할 때와 같은 구체화된 뷰 유지관리 자동 새로고침 비용은 뷰가 상주하는 프로젝트에 청구됩니다. 수동 새로고침 비용은 수동 새로고침 작업이 실행되는 프로젝트에 청구됩니다. 유지보수 비용 제어에 대한 자세한 내용은 작업 유지보수 새로고침을 참조하세요.
- 구체화된 뷰 테이블 저장
| 구성요소 | 주문형 가격 책정 | 용량 기반 가격 책정 |
|---|---|---|
| 쿼리 | 구체화된 뷰로 처리된 바이트 및 기본 테이블의 모든 필수 부분1 | 쿼리 시에 슬롯이 소비됩니다. |
| 유지보수 | 새로고침 시 처리되는 바이트 | 새로고침 시에 슬롯이 소비됩니다. |
| 스토리지 | 구체화된 뷰에 저장된 바이트 | 구체화된 뷰에 저장된 바이트 |
1가능한 경우 BigQuery는 뷰를 새로고침한 마지막 시간 이후의 변경사항만 읽습니다. 자세한 내용은 증분 업데이트를 참조하세요.
스토리지 비용 세부정보
구체화된 뷰에서 AVG, ARRAY_AGG, APPROX_COUNT_DISTINCT 집계 값에 대해서는 최종 값이 직접 저장되지 않습니다. 대신 BigQuery가 최종 값 생성에 사용되는 중간 스케치로 구체화된 뷰를 내부적으로 저장합니다.
예를 들어 다음 명령어로 생성된 구체화된 뷰를 보세요.
CREATE MATERIALIZED VIEW project-id.my_dataset.my_mv_table AS SELECT date, AVG(net_paid) AS avg_paid FROM project-id.my_dataset.my_base_table GROUP BY date
avg_paid 열이 사용자에게 NUMERIC 또는 FLOAT64로 렌더링되지만, 내부적으로는 BYTES로 저장되어, 해당 콘텐츠가 고유 형식의 중간 스케치로 저장됩니다. 데이터 크기 계산에서 이 열은 BYTES로 취급됩니다.