구체화된 뷰 모니터링

BigQuery INFORMATION_SCHEMA 뷰를 확인하여 구체화된 뷰 사용량 및 새로고침 작업을 모니터링할 수 있습니다. 구체화된 뷰 목록을 만들려면 구체화된 뷰 나열을 참조하세요.

구체화된 뷰 INFORMATION_SCHEMA

구체화된 뷰를 검색하려면 INFORMATION_SCHEMA.TABLES를 쿼리합니다. 구체화된 뷰의 속성을 검색하려면 INFORMATION_SCHEMA.TABLE_OPTIONS를 쿼리합니다.

구체화된 뷰는 INFORMATION_SCHEMA.VIEWS 테이블에 나열되지 않습니다.

자동 새로고침 모니터링

이 섹션에서는 구체화된 뷰의 새로고침 세부정보를 보는 방법을 보여줍니다.

마지막 새로고침 상태 보기

구체화된 뷰의 현재 상태를 검색하려면 tables.get 메서드를 호출하거나 INFORMATION_SCHEMA.MATERIALIZED_VIEWS를 쿼리합니다.

예를 들면 다음과 같습니다.

SELECT
  table_name, last_refresh_time, refresh_watermark, last_refresh_status
FROM
  `DATASET`.INFORMATION_SCHEMA.MATERIALIZED_VIEWS;

last_refresh_status 값이 NULL이 아니면 마지막 자동 새로고침 작업이 실패한 것입니다. 수동 새로고침 요청은 여기에 반영되지 않습니다. 기본 테이블을 변경하면 구체화된 뷰 정의가 무효화되어 자동 새로고침 중에 오류가 발생할 수 있습니다. 자세한 내용은 증분 업데이트를 참조하세요. 예를 들어 구체화된 뷰에서 참조하는 열이 기본 테이블에서 삭제되면 last_refresh_status 필드가 invalidQuery 오류를 반환합니다. 자세한 내용은 오류 메시지를 참조하세요.

자동 새로고침 작업 나열

구체화된 뷰 자동 새로고침 작업을 나열하려면 jobs.list 메서드를 호출합니다. 작업에 대한 세부정보를 검색하려면 jobs.get 메서드를 호출합니다. 또한 INFORMATION_SCHEMA.JOBS_BY_*를 쿼리하여 작업을 가져올 수 있습니다. 자동 새로고침 작업에는 작업 ID 내의 materialized_view_refresh 프리픽스가 포함되며, BigQuery 관리자 계정으로 시작됩니다.

예를 들면 다음과 같습니다.

SELECT
  job_id, total_slot_ms, total_bytes_processed,
  materialized_view_statistics.materialized_view[SAFE_OFFSET(0)].rejected_reason
  AS full_refresh_reason
FROM
  `region-us.INFORMATION_SCHEMA.JOBS_BY_PROJECT`
WHERE
  job_id LIKE '%materialized_view_refresh_%'
LIMIT 10;

새로고침 작업 비용을 모니터링하고 필요한 경우 자동 새로고침 간격을 조정하려면 total_bytes_processedtotal_slot_ms 필드를 확인하세요.

예를 들어 기본 테이블의 수집 간격이 비교적 작으면 뷰를 덜 빈번하게 새로고침하는 것이 좋습니다. 기본 데이터가 빠르게 변경될 때는 더 자주 새로고침하는 것이 좋습니다.

기본 테이블이 야간 추출, 변환, 로드(ETL) 파이프라인 사용과 같이 사전 정의된 시점에 데이터를 수집하는 경우 다음과 같이 구체화된 뷰 유지보수 일정을 제어해야 합니다.

  1. 자동 새로고침을 사용 중지합니다.

  2. ETL 파이프라인의 일환으로 수동으로 새로고침을 수행하거나 하루 중 특정 시간에 예약된 쿼리를 구성합니다.

구체화된 뷰 가격 책정에 대한 자세한 내용은 구체화된 뷰 가격 책정을 참조하세요.

구체화된 뷰 사용량 모니터링

쿼리 작업의 구체화된 뷰 사용을 보려면 jobs.get 메서드를 호출하거나 INFORMATION_SCHEMA.JOBS_BY_*를 쿼리하고 materialized_view_statistics 필드를 확인합니다. 다음 세부정보를 포함하여 쿼리에서 구체화된 뷰 사용에 대한 세부정보를 제공합니다.

  • 구체화된 뷰가 사용되었는지 여부
  • 구체화된 뷰가 사용되지 않은 경우 거부된 이유

예를 들면 다음과 같습니다.

SELECT
  job_id, materialized_view_statistics
FROM
  region-US.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE
  job_id = '<my-query-job-id>';

시간 경과에 따른 구체화된 뷰의 사용량을 보려면 INFORMATION_SCHEMA.JOBS_BY_*를 쿼리합니다.

예를 들어 다음 쿼리는 대상 구체화된 뷰를 사용하는 최근 쿼리 작업의 요약을 반환합니다.

SELECT
  mv.table_reference.dataset_id,
  mv.table_reference.table_id,
  MAX(job.creation_time) latest_job_time,
  COUNT(job_id) job_count
FROM
  region-US.INFORMATION_SCHEMA.JOBS_BY_PROJECT job,
  UNNEST(materialized_view_statistics.materialized_view) mv
WHERE
  job.creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP, INTERVAL 7 DAY)
  AND mv.table_reference.dataset_id = 'my_dataset'
  AND mv.table_reference.table_id = 'my_materialized_view'
  AND mv.chosen = TRUE
GROUP BY 1, 2;

구체화된 뷰로 느린 쿼리 문제 해결

쿼리에서 구체화된 뷰를 사용하고 예상보다 느리게 실행되는 경우 다음을 수행합니다.

  1. 의도한 구체화된 뷰가 쿼리에서 실제로 사용되고 있는지 확인합니다. 자세한 안내는 구체화된 뷰 사용량 모니터링을 참조하세요.
  2. 구체화된 뷰의 최신 상태를 확인합니다.
  3. 구체화된 뷰 정의 및 참조하는 데이터를 검토하고 구체화된 뷰 사용량을 최적화하는 기법을 고려합니다.