구체화된 뷰 소개
이 문서는 구체화된 뷰의 BigQuery 지원에 대한 개요를 설명합니다. 이 문서를 읽기 전에 BigQuery 및 BigQuery의 논리적 뷰를 숙지하세요.
개요
BigQuery에서 구체화된 뷰는 성능 및 효율성 향상을 위해 쿼리 결과를 주기적으로 캐시하는 미리 계산된 뷰입니다. BigQuery는 구체화된 뷰에서 미리 계산된 결과를 활용하고, 가능한 모든 경우에 기본 테이블에서 델타 변경사항만 읽어 최신 결과를 계산합니다. 구체화된 뷰는 직접 쿼리될 수도 있고, 기본 테이블에 대한 쿼리 처리를 위해 BigQuery 옵티마이저가 사용할 수도 있습니다.
구체화된 뷰를 사용하는 쿼리는 일반적으로 기본 테이블에서 동일한 데이터만 검색하는 쿼리보다 속도가 빠르며 리소스 소비도 적습니다. 구체화된 뷰는 공통되고 반복된 쿼리 특성이 있는 워크로드 성능을 크게 향상시킬 수 있습니다.
구체화된 뷰의 네 가지 주요 특성은 다음과 같습니다.
- 유지보수 불필요. 기본 테이블이 변경되면 구체화된 뷰가 백그라운드에서 미리 계산됩니다. 기본 테이블의 모든 증분된 데이터 변경사항은 사용자 작업 없이도 구체화된 뷰에 자동으로 추가됩니다.
- 최신 데이터. 구체화된 뷰는 최신 데이터를 반환합니다. 기본 테이블 변경사항으로 인해 구체화된 뷰가 무효화될 경우 기본 테이블에서 데이터를 직접 읽습니다. 기본 테이블 변경사항으로 인해 구체화된 뷰가 무효화되지 않으면 구체화된 뷰에서 나머지 데이터를 읽고 기본 테이블에서 변경사항만 읽습니다.
- 스마트 조정. 구체화된 뷰를 쿼리하여 기본 테이블에 대한 쿼리 중 일부를 확인할 수 있으면 성능 및 효율성 개선을 위해 구체화된 뷰를 사용하도록 BigQuery가 쿼리 경로를 다시 지정합니다.
사용 사례
구체화된 뷰는 높은 계산 비용과 작은 데이터 세트 결과로 쿼리를 최적화할 수 있습니다. 구체화된 뷰의 이점이 있는 프로세스에는 추출, 변환, 로드(ETL) 프로세스 또는 비즈니스 인텔리전스(BI) 파이프라인의 쿼리와 같이 예측 가능하고 반복되는 쿼리로 상당한 처리가 필요한 온라인 분석 처리(OLAP) 작업이 포함됩니다.
다음 사용 사례는 구체화된 뷰의 가치를 강조해서 보여줍니다. 다음 작업을 자주 수행해야 할 경우 구체화된 뷰는 쿼리 성능 향상에 도움이 됩니다.
- 데이터 사전 집계. 스트리밍 데이터를 집계합니다.
- 데이터 사전 필터링. 테이블의 특정 하위 집합만 읽는 쿼리를 실행합니다.
- 데이터 사전 조인. 특히 큰 테이블과 작은 테이블 사이의 쿼리 조인.
- 데이터 재클러스터링. 기본 테이블과 다른 클러스터링 스킴을 활용하는 쿼리를 실행합니다.
다른 BigQuery 기법과 비교
다음 표에서는 BigQuery 캐싱, 예약된 쿼리, 논리적 뷰, 구체화된 뷰 사이의 유사점과 차이점을 요약해서 보여줍니다.
구성요소 | 캐싱 | 예약된 쿼리 | 논리적 뷰 | 구체화된 뷰 |
---|---|---|---|---|
컴퓨팅 최적화 | 예 | 아니요 | 아니요 | 예 |
쿼리 지원 | 전체 | 전체 | 전체 | 제한됨1 |
파티션 나누기 및 클러스터링 | 아니요 | 예 | 해당 사항 없음 | 예 |
증분 새로고침 | 아니요 | 아니요 | 아니요 | 예 |
추가 스토리지 | 아니요 | 예 | 아니요 | 예 |
쿼리 재작성 | 아니요 | 아니요 | 아니요 | 예 |
유지보수 비용 | 아니요 | 예 | 해당 사항 없음 | 예 |
데이터 비활성 | 아니요 | 예 | 아니요 | 선택사항2 |
1 --allow_non_incremental_definition
옵션은 광범위한 SQL 쿼리를 지원하여 구체화된 뷰를 만듭니다.
2 --max_staleness
옵션은 자주 변경되는 대규모 데이터 세트를 처리할 때 비용을 제어하면서 지속적으로 고성능을 제공합니다.
다른 BigQuery 기능과 상호작용
다음 BigQuery 기능은 구체화된 뷰에서 투명하게 작동합니다.
쿼리 계획 설명: 쿼리 계획에는 스캔되는 구체화된 뷰(있는 경우)가 무엇인지 반영되고 구체화된 뷰 및 결합된 기본 테이블에서 읽은 바이트 수가 표시됩니다.
쿼리 캐싱: BigQuery가 구체화된 뷰를 사용하여 다시 작성하는 쿼리 결과는 일반적인 제한(결정적 함수 사용, 기본 테이블에 대한 스트리밍 없음 등)에 따라 캐시될 수 있습니다.
비용 제한: 청구되는 최대 바이트 수 값이 설정되었고, 쿼리가 이 제한을 벗어나서 더 많은 바이트 수를 읽을 경우에는 쿼리에 구체화된 뷰, 기본 테이블 또는 둘 다 사용되는지 여부에 관계없이 비용이 발생하지 않고 쿼리가 실패합니다.
테스트 실행을 사용한 비용 예상: 테스트 실행에서는 사용 가능한 구체화된 뷰를 사용해서 쿼리 재작성 로직을 반복하고 비용 예상을 제공합니다. 이 기능을 사용하면 특정 쿼리가 구체화된 뷰를 사용하는지 여부를 테스트하는 방법으로 사용할 수 있습니다.
BigLake 메타데이터 캐시 지원 테이블
BigLake 메타데이터 캐시 지원 테이블을 통한 구체화된 뷰는 Cloud Storage 및 Amazon Simple Storage Service(Amazon S3)에 저장된 구조화된 데이터를 참조할 수 있습니다. 이 구체화된 뷰는 자동 새로고침 및 스마트 조정의 이점을 포함하여 BigQuery 관리형 스토리지 테이블에 대한 구체화된 뷰처럼 작동합니다. 다른 이점으로는 BigQuery 외부에 저장된 데이터의 사전 집계, 사전 필터링, 사전 조인이 있습니다. BigLake 테이블에 대한 구체화된 뷰는 BigQuery 관리형 스토리지에 저장되며 BigQuery 관리형 스토리지의 모든 특성을 포함합니다.
Amazon S3 BigLake 테이블을 통해 구체화된 뷰를 만드는 경우 BigQuery 데이터와의 조인에 구체화된 뷰의 데이터를 사용할 수 없습니다. 조인에 구체화된 뷰의 Amazon S3 데이터를 사용하려면 구체화된 뷰의 복제본을 만듭니다. 승인된 구체화된 뷰를 통해서만 구체화된 뷰 복제본을 만들 수 있습니다.
구체화된 뷰 복제본
BigQuery를 사용하면 Amazon Simple Storage Service(Amazon S3) 데이터를 통해 BigLake 메타데이터 캐시 지원 테이블에서 구체화된 뷰를 만들 수 있습니다.
구체화된 뷰 복제본을 사용하면 데이터 이그레스 비용을 방지하고 쿼리 성능을 향상시키는 동시에 쿼리에서 Amazon S3 구체화된 뷰 데이터를 사용할 수 있습니다. 구체화된 뷰 복제본은 지원되는 BigQuery 리전의 데이터 세트에 Amazon S3 데이터를 복제하여 작동하므로 데이터를 BigQuery에서 로컬로 사용할 수 있습니다.
구체화된 뷰 복제본을 만드는 방법을 알아보세요.
데이터 최신 상태
구체화된 뷰 복제본이 생성되면 복제 프로세스는 변경사항에 대한 소스 구체화된 뷰를 폴링하고 데이터를 구체화된 뷰 복제본에 복제합니다. CREATE MATERIALIZED VIEW AS REPLICA OF
문의 replication_interval_seconds
옵션에 지정된 간격으로 데이터가 복제됩니다.
복제 간격 외에도 구체화된 뷰 복제본 데이터의 최신 상태는 소스 구체화된 뷰를 새로 고치는 빈도와 구체화된 뷰에서 사용하는 Amazon S3 테이블의 메타데이터 캐시를 새로 고치는 빈도에 따라 영향을 받습니다.
Google Cloud 콘솔을 사용하여 구체화된 뷰 복제본 및 해당 리소스의 데이터 최신 상태를 확인할 수 있습니다.
- 구체화된 뷰 복제본의 최신 상태를 보려면 구체화된 뷰 복제본의 세부정보 창에서 최종 수정 시간 필드를 확인합니다.
- 소스 구체화된 뷰의 최신 상태를 보려면 구체화된 뷰의 세부정보 창에서 최종 수정 시간 필드를 확인합니다.
- 소스 Amazon S3 테이블 메타데이터 캐시의 최신 상태를 보려면 구체화된 뷰의 세부정보 창에서 최대 비활성 필드를 확인합니다.
지원되는 리전
구체화된 뷰 복제본을 만들 때 다음 표의 위치 매핑을 사용합니다.
소스 구체화된 뷰의 위치 | 구체화된 뷰 복제본의 위치 |
---|---|
aws-us-east-1 |
US 멀티 리전 또는 다음 리전 중 하나:
|
aws-us-west-2 |
US 멀티 리전 또는 다음 리전 중 하나:
|
aws-eu-west-1 |
EU 멀티 리전 또는 다음 리전 중 하나:
|
aws-ap-northeast-2 |
다음 리전 중 하나:
|
제한사항
- 기본 테이블 참조 한도 및 기타 제한사항이 적용될 수 있습니다. 구체화된 뷰 한도에 대한 자세한 내용은 할당량 및 한도를 참조하세요.
- 구체화된 뷰 데이터는
COPY
,EXPORT
,LOAD
,WRITE
또는 데이터 조작 언어(DML) 문과 같은 작업을 사용하여 직접 업데이트하거나 조작할 수 없습니다. - 기존의 구체화된 뷰를 동일한 이름의 구체화된 뷰로 바꿀 수 없습니다.
- 구체화된 뷰를 만든 후에는 뷰 SQL을 업데이트할 수 없습니다.
- 구체화된 뷰는 기본 테이블과 동일한 조직에 있어야 하고 프로젝트가 조직에 속하지 않는 경우에는 동일한 프로젝트에 있어야 합니다.
- 동일한 데이터 세트의 구체화된 뷰만 스마트 조정에 고려됩니다.
- 구체화된 뷰는 제한된 SQL 문법과 제한된 집계 함수 집합을 사용합니다. 자세한 내용은 지원되는 구체화된 뷰를 참조하세요.
- 구체화된 뷰는 다른 구체화된 뷰 위에 중첩될 수 없습니다.
- 구체화된 뷰는 외부 또는 와일드 카드 테이블, 논리적 뷰1, 스냅샷 또는 변경 데이터 캡처가 사용 설정된 테이블을 쿼리할 수 없습니다.
- 구체화된 뷰에는 GoogleSQL 언어만 지원됩니다.
- 구체화된 뷰에 대한 설명을 설정할 수 있지만 구체화된 뷰의 개별 열에 대한 설명은 설정할 수 없습니다.
- 구체화된 뷰를 먼저 삭제하지 않고 기본 테이블을 삭제하면 구체화된 뷰의 쿼리 및 새로고침이 실패합니다. 기본 테이블을 다시 만들려면 구체화된 뷰도 다시 만들어야 합니다.
1논리적 뷰 참조 지원은 미리보기 버전입니다. 자세한 내용은 논리적 뷰 참조를 참조하세요.
BigLake 테이블에 대한 구체화된 뷰의 제한사항
- 구체화된 뷰의 파티셔닝은 지원되지 않습니다. 기본 테이블에서는 Hive 파티셔닝을 사용할 수 있지만 구체화된 뷰 스토리지는 BigLake 테이블에서 파티션을 나눌 수 없습니다. 즉, 기본 테이블이 삭제되면 구체화된 뷰가 완전히 새로고침됩니다. 자세한 내용은 증분 업데이트를 참조하세요.
- 구체화된 뷰의
-max_staleness
옵션 값은 BigLake 기본 테이블 값보다 커야 합니다. - BigQuery 관리형 테이블과 BigLake 테이블 간의 조인은 단일 구체화된 뷰 정의에서 지원되지 않습니다.
구체화된 뷰 복제본의 제한사항
- 행 수준 보안 또는 열 수준 보안을 사용하는 테이블을 기반으로 하는 구체화된 뷰에는 구체화된 뷰 복제본을 만들 수 없습니다.
- 소스 구체화된 뷰 또는 구체화된 뷰 복제본에는 고객 관리 암호화 키(CMEK)를 사용할 수 없습니다.
- 메타데이터 캐싱을 사용하는 테이블을 기반으로 하는 구체화된 뷰에만 구체화된 뷰 복제본을 만들 수 있습니다.
- 지정된 소스 구체화된 뷰에 대해 구체화된 뷰 복제본 하나만 만들 수 있습니다.
- 승인된 구체화된 뷰의 구체화된 뷰 복제본만 만들 수 있습니다.
구체화된 뷰 가격 책정
비용은 구체화된 뷰의 다음 측면과 관련이 있습니다.
- 구체화된 뷰 쿼리
- 구체화된 뷰를 새로고침할 때와 같은 구체화된 뷰 유지관리 자동 새로고침 비용은 뷰가 상주하는 프로젝트에 청구됩니다. 수동 새로고침 비용은 수동 새로고침 작업이 실행되는 프로젝트에 청구됩니다. 유지보수 비용 제어에 대한 자세한 내용은 작업 유지보수 새로고침을 참조하세요.
- 구체화된 뷰 테이블 저장
구성요소 | 주문형 가격 책정 | 용량 기반 가격 책정 |
---|---|---|
쿼리 | 구체화된 뷰로 처리된 바이트 및 기본 테이블의 모든 필수 부분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
로 취급됩니다.
구체화된 뷰 복제본 비용
구체화된 뷰 복제본을 사용하면 컴퓨팅, 아웃바운드 데이터 전송, 스토리지 비용이 발생합니다.