구체화된 뷰 관리
이 문서에서는 BigQuery에서 구체화된 뷰를 관리하는 방법을 설명합니다.
구체화된 뷰의 BigQuery 관리에는 다음 작업이 포함됩니다.
구체화된 뷰에 관한 자세한 내용은 다음을 참고하세요.
시작하기 전에
사용자에게 이 문서의 각 작업을 수행하는 데 필요한 권한을 부여하는 Identity and Access Management(IAM) 역할을 부여합니다. 태스크를 수행하는 데 필요한 권한(있는 경우)이 태스크의 '필요한 권한' 섹션에 나열됩니다.
구체화된 뷰 변경
Google Cloud 콘솔 또는 bq 명령줄 도구를 사용하거나 ALTER MATERIALIZED
VIEW
및 SET OPTIONS
와 함께 데이터 정의 언어(DDL)를 사용해서 구체화된 뷰를 변경할 수 있습니다. 구체화된 뷰 옵션 목록은 materialized_view_set_options_list
를 참조하세요.
다음은 enable_refresh
를 true
로 설정한 예시를 보여줍니다. 사용 사례에 맞게 조정하세요.
필수 권한
구체화된 뷰를 변경하려면 bigquery.tables.get
및 bigquery.tables.update
IAM 권한이 필요합니다.
다음과 같은 사전 정의된 각 IAM 역할에는 뷰를 삭제하는 데 필요한 권한이 포함되어 있습니다.
bigquery.dataEditor
bigquery.dataOwner
bigquery.admin
BigQuery Identity and Access Management(IAM)에 대한 자세한 내용은 사전 정의된 역할 및 권한을 참조하세요.
SQL
구체화된 뷰를 변경하려면 ALTER MATERIALIZED VIEW SET OPTIONS
DDL 문을 사용합니다.
Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
쿼리 편집기에서 다음 문을 입력합니다.
ALTER MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW SET OPTIONS (enable_refresh = true);
다음을 바꿉니다.
PROJECT
: 구체화된 뷰가 포함된 프로젝트의 이름DATASET
: 구체화된 뷰가 포함된 데이터 세트의 이름MATERIALIZED_VIEW
: 변경할 구체화된 뷰의 이름
실행을 클릭합니다.
쿼리를 실행하는 방법에 대한 자세한 내용은 대화형 쿼리 실행을 참조하세요.
bq
bq update
명령어를 실행합니다.
bq update \ --enable_refresh=true \ --refresh_interval_ms= \ PROJECT.DATASET.MATERIALIZED_VIEW
자바
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Java 설정 안내를 따르세요. 자세한 내용은 BigQuery Java API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
구체화된 뷰 나열
Google Cloud 콘솔, bq 명령줄 도구 또는 BigQuery API를 통해 구체화된 뷰를 나열할 수 있습니다.
필수 권한
데이터 세트의 구체화된 뷰를 나열하려면 bigquery.tables.list
IAM 권한이 필요합니다.
사전 정의된 다음 각 IAM 역할에는 데이터 세트의 구체화된 뷰를 나열하는 데 필요한 권한이 포함되어 있습니다.
roles/bigquery.user
roles/bigquery.metadataViewer
roles/bigquery.dataViewer
roles/bigquery.dataOwner
roles/bigquery.dataEditor
roles/bigquery.admin
IAM 역할과 권한에 대한 자세한 내용은 사전 정의된 역할 및 권한을 참조하세요.
구체화된 뷰를 나열하는 프로세스는 테이블을 나열하는 프로세스와 동일합니다. 데이터 세트에서 구체화된 뷰를 나열하려면 다음 안내를 따르세요.
콘솔
탐색기 패널에서 프로젝트를 확장하고 데이터 세트를 선택합니다.
목록을 스크롤하여 데이터세트의 테이블을 확인합니다. 테이블, 뷰, 구체화된 뷰는 서로 다른 아이콘으로 구분됩니다.
bq
bq ls
명령어를 실행합니다. --format
플래그를 사용하면 출력을 제어할 수 있습니다. 기본 프로젝트가 아닌 프로젝트의 구체화된 뷰를 나열하려면 데이터 세트에 project_id:dataset
형식으로 프로젝트 ID를 추가합니다.
bq ls --format=pretty project_id:dataset
각 항목의 의미는 다음과 같습니다.
- project_id: 프로젝트 ID
- dataset는 데이터 세트 이름입니다.
명령어를 실행하면 Type
필드에 테이블 유형이 표시됩니다.
예를 들면 다음과 같습니다.
+-------------------------+--------------------+----------------------+-------------------+ | tableId | Type | Labels | Time Partitioning | +-------------------------+--------------------+----------------------+-------------------+ | mytable | TABLE | department:shipping | | | mymatview | MATERIALIZED_VIEW | | | +-------------------------+--------------------+----------------------+-------------------+
예:
기본 프로젝트의 mydataset
데이터 세트에 있는 구체화된 뷰를 나열하려면 다음 명령어를 입력합니다.
bq ls --format=pretty mydataset
myotherproject
의 mydataset
데이터 세트에 있는 구체화된 뷰를 나열하려면 다음 명령어를 입력합니다.
bq ls --format=pretty myotherproject:mydataset
API
API를 사용하여 구체화된 뷰를 나열하려면 tables.list
메서드를 호출합니다.
Go
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Go 설정 안내를 따르세요. 자세한 내용은 BigQuery Go API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Python
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Python 설정 안내를 따르세요. 자세한 내용은 BigQuery Python API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
구체화된 뷰에 대한 정보 가져오기
SQL, bq 명령줄 도구 또는 BigQuery API를 사용하여 구체화된 뷰에 관한 정보를 가져올 수 있습니다.
필수 권한
구체화된 뷰에 대한 정보를 쿼리하려면 다음 Identity and Access Management(IAM) 권한이 필요합니다.
bigquery.tables.get
bigquery.tables.list
bigquery.routines.get
bigquery.routines.list
다음과 같이 사전 정의된 각 IAM 역할에는 위의 권한이 포함되어 있습니다.
roles/bigquery.metadataViewer
roles/bigquery.dataViewer
roles/bigquery.admin
BigQuery 권한에 대한 자세한 내용은 IAM으로 액세스 제어를 참조하세요.
종속 구체화된 뷰 복제본을 포함하여 구체화된 뷰에 대한 정보를 가져오려면 다음을 실행합니다.
SQL
구체화된 뷰에 대한 정보를 가져오려면 INFORMATION_SCHEMA.TABLES
뷰를 쿼리합니다.
Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
쿼리 편집기에서 다음 문을 입력합니다.
SELECT * FROM PROJECT_ID.DATASET_ID.INFORMATION_SCHEMA.TABLES WHERE table_type = 'MATERIALIZED VIEW';
다음을 바꿉니다.
PROJECT_ID
: 구체화된 뷰가 포함된 프로젝트의 이름DATASET_ID
: 구체화된 뷰가 포함된 데이터 세트의 이름
실행을 클릭합니다.
쿼리를 실행하는 방법에 대한 자세한 내용은 대화형 쿼리 실행을 참조하세요.
bq
bq show
명령어를 사용합니다.
bq show --project=project_id --format=prettyjson dataset.materialized_view
다음을 바꿉니다.
- project_id: 프로젝트 ID 기본 프로젝트가 아닌 다른 프로젝트에서 구체화된 뷰에 대한 정보를 가져오려면 이 플래그만 포함하면 됩니다.
- dataset: 구체화된 뷰가 포함된 데이터 세트의 이름입니다.
- materialized_view: 정보를 원하는 구체화된 뷰의 이름
예:
다음 명령어를 입력하면 myproject
프로젝트의 report_views
데이터 세트에 있는 구체화된 뷰 my_mv
에 대한 정보가 표시됩니다.
bq show --project=myproject --format=prettyjson report_views.my_mv
API
API를 사용하여 구체화된 뷰 정보를 가져오려면 tables.get
메서드를 호출합니다.
구체화된 뷰 삭제
Google Cloud 콘솔, bq 명령줄 도구, API를 통해 구체화된 뷰를 삭제할 수 있습니다.
구체화된 뷰를 삭제하면 이 구체화된 뷰와 연결된 권한도 삭제됩니다. 삭제된 구체화된 뷰를 다시 만들 때는 이전에 연결된 모든 액세스 권한을 수동으로 다시 구성해야 합니다.
필수 권한
구체화된 뷰를 삭제하려면 bigquery.tables.delete
IAM 권한이 필요합니다.
다음과 같은 사전 정의된 각 IAM 역할에는 구체화된 뷰를 삭제하는 데 필요한 권한이 포함되어 있습니다.
bigquery.dataEditor
bigquery.dataOwner
bigquery.admin
BigQuery Identity and Access Management(IAM)에 대한 자세한 내용은 사전 정의된 역할 및 권한을 참조하세요.
SQL
구체화된 뷰를 삭제하려면 DROP MATERIALIZED VIEW
DDL 문을 사용합니다.
Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
쿼리 편집기에서 다음 문을 입력합니다.
DROP MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW;
다음을 바꿉니다.
PROJECT
: 구체화된 뷰가 포함된 프로젝트의 이름DATASET
: 구체화된 뷰가 포함된 데이터 세트의 이름MATERIALIZED_VIEW
: 삭제할 구체화된 뷰의 이름
실행을 클릭합니다.
쿼리를 실행하는 방법에 대한 자세한 내용은 대화형 쿼리 실행을 참조하세요.
bq
bq rm
명령어를 사용하여 구체화된 뷰를 삭제합니다.
API
tables.delete
메서드를 호출하고 projectId
, datasetId
, tableId
매개변수의 값을 지정합니다.
- 프로젝트 ID에
projectId
매개변수를 할당합니다. - 데이터 세트 ID에
datasetId
매개변수를 할당합니다. - 삭제하려는 구체화된 뷰의 테이블 ID에
tableId
매개변수를 할당합니다.
자바
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Java 설정 안내를 따르세요. 자세한 내용은 BigQuery Java API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
구체화된 뷰 새로고침
구체화된 뷰를 새로고침하면 뷰의 캐시된 데이터가 기본 테이블의 현재 상태를 반영하도록 업데이트됩니다.
구체화된 뷰를 쿼리하면 BigQuery는 캐시된 구체화된 뷰 데이터와 기본 테이블에서 가져온 데이터의 결과를 모두 반환합니다. 가능한 경우 BigQuery는 뷰를 새로고침한 마지막 시간 이후의 변경사항만 읽습니다. 최근에 스트리밍된 데이터는 구체화된 뷰를 새로고침하는 동안 포함되지 않을 수 있지만 쿼리는 구체화된 뷰의 사용 여부와 관계없이 항상 스트리밍된 데이터를 읽습니다.
기본 테이블에서 직접 쿼리 결과를 반환하면 캐시된 구체화된 뷰 데이터에서 결과를 반환하는 것보다 계산 비용이 더 많이 듭니다. 구체화된 뷰 캐시 데이터를 정기적으로 새로고침하면 기본 테이블에서 직접 반환되는 데이터의 양이 줄어들어 컴퓨팅 비용이 절감됩니다.
이 섹션에서는 다음 작업을 수행하는 방법을 설명합니다.
자동 새로고침
언제든지 자동 새로고침을 사용 설정하거나 중지할 수 있습니다. 자동 새로고침 작업은 bigquery-adminbot@system.gserviceaccount.com
서비스 계정에서 수행되며 구체화된 뷰 프로젝트의 작업 기록에 표시됩니다.
기본적으로 구체화된 뷰의 캐시된 데이터는 기본 테이블이 변경된 후(예: 행 삽입 또는 행 삭제) 5~30분 이내에 기본 테이블에서 자동으로 새로고침됩니다.
최대 새로고침 실행 빈도를 설정하여 캐시된 데이터의 자동 새로고침 빈도를 관리하고 구체화된 뷰의 비용과 쿼리 성능을 관리할 수 있습니다.
자동 새로고침 사용 설정 및 사용 중지
구체화된 뷰를 만들 때 자동 새로고침을 사용 중지하려면 enable_refresh
를 false
로 설정합니다.
CREATE MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW PARTITION BY RANGE_BUCKET(column_name, buckets) OPTIONS (enable_refresh = false) AS SELECT ...
기존 구체화된 뷰의 경우 ALTER MATERIALIZED VIEW
를 사용하여 enable_refresh
값을 수정할 수 있습니다.
ALTER MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW SET OPTIONS (enable_refresh = true);
최대 실행 빈도 설정
자동 새로고침 실행 빈도에 대한 최대 실행 빈도를 구성할 수 있습니다. 기본적으로 구체화된 뷰는 30분마다 새로고침됩니다.
최대 새로고침 실행 빈도는 언제든지 변경할 수 있습니다.
구체화된 뷰를 만들 때 최대 새로고침 실행 빈도를 설정하려면 DDL에서 refresh_interval_minutes
를 (또는 API와 bq 명령줄 도구로 refresh_interval_ms
를) 원하는 값으로 설정하세요.
CREATE MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW OPTIONS (enable_refresh = true, refresh_interval_minutes = 60) AS SELECT ...
마찬가지로 구체화된 뷰를 수정할 때 최대 실행 빈도를 설정할 수 있습니다. 이 예시에서는 이미 자동 새로고침을 사용 설정했고 최대 실행 빈도 설정만 변경하려고 합니다.
ALTER MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW SET OPTIONS (refresh_interval_minutes = 60);
최대 새로고침 실행 빈도의 최솟값은 1분입니다. 최대 새로고침 실행 빈도의 최댓값은 7일입니다.
언제든지 구체화된 뷰를 수동으로 새로고침할 수 있으며 타이밍에는 최대 실행 빈도 설정이 적용되지 않습니다.
최대한 노력
자동 새로고침은 최선을 다해 수행됩니다. BigQuery는 기본 테이블이 변경되고 5분 이내에 새로고침을 시작하려 시도하지만(이전 새로고침이 30분 이전에 수행된 경우), 새로고침이 그 시점에 시작된다는 보장도 없고 완료된다는 보장도 없습니다.
자동 새로고침은 일괄 우선순위를 갖는 쿼리와 유사하게 취급됩니다. 현재 구체화된 뷰의 프로젝트에 용량이 없으면 새로고침이 지연됩니다. 프로젝트에 새로고침 비용이 많이 발생하는 뷰가 여러 개 포함된 경우 각각의 개별 뷰가 기본 테이블에 비해 상당히 지연될 수 있습니다.
수동 새로고침
언제든지 구체화된 뷰를 새로고침할 수 있습니다.
필수 권한
구체화된 뷰를 수동으로 새로고침하려면 bigquery.tables.getData
, bigquery.tables.update
, bigquery.tables.updateData
IAM 권한이 필요합니다.
다음과 같은 사전 정의된 각 IAM 역할에는 구체화된 뷰를 수동으로 새로고침하는 데 필요한 권한이 포함되어 있습니다.
bigquery.dataEditor
bigquery.dataOwner
bigquery.admin
BigQuery Identity and Access Management(IAM)에 대한 자세한 내용은 사전 정의된 역할 및 권한을 참조하세요.
구체화된 뷰의 데이터를 업데이트하려면 BQ.REFRESH_MATERIALIZED_VIEW
시스템 절차를 호출합니다. 이 절차를 호출하면 BigQuery가 기본 테이블에서 발생한 변경사항을 식별하고 변경사항을 구체화된 뷰에 적용합니다. 새로고침이 완료되면 BQ.REFRESH_MATERIALIZED_VIEW
를 실행하는 쿼리가 완료됩니다.
CALL BQ.REFRESH_MATERIALIZED_VIEW('PROJECT.DATASET.MATERIALIZED_VIEW');
구체화된 뷰 모니터링
BigQuery API를 사용하여 구체화된 뷰 및 구체화된 뷰 새로고침 작업에 대한 정보를 가져올 수 있습니다. 자세한 내용은 구체화된 뷰 모니터링을 참고하세요.