구체화된 뷰 문제 해결

이 문서는 구체화된 뷰 생성 시 오류, 새로고침 실패, 예상치 못한 쿼리 성능 등 BigQuery의 구체화된 뷰와 관련된 일반적인 문제를 해결하는 데 도움이 됩니다.

진단 워크플로

구체화된 뷰의 문제를 조사할 때는 다음 진단 단계에 따라 근본 원인을 파악하세요.

  1. 테이블 유형 및 메타데이터 확인 타겟 테이블이 구체화된 뷰인지 확인하고 구성 옵션을 확인합니다.

    SELECT
     table_name,
     table_type
    FROM
     `PROJECT_ID.DATASET`.INFORMATION_SCHEMA.TABLES
    WHERE
     table_name = 'MATERIALIZED_VIEW';

    다음을 바꿉니다.

    • PROJECT_ID: 구체화된 뷰가 포함된 프로젝트입니다.
    • DATASET: 구체화된 뷰가 포함된 데이터 세트입니다.
    • MATERIALIZED_VIEW: 구체화된 뷰의 이름입니다.

    enable_refresh, refresh_interval_minutes, max_staleness와 같은 구성 옵션을 검사하려면 INFORMATION_SCHEMA.TABLE_OPTIONS를 쿼리하세요.

    SELECT
     table_name,
     option_name,
     option_value
    FROM
     `PROJECT_ID.DATASET`.INFORMATION_SCHEMA.TABLE_OPTIONS
    WHERE
     table_name = 'MATERIALIZED_VIEW';
  2. 마지막 새로고침 상태를 확인합니다. INFORMATION_SCHEMA.MATERIALIZED_VIEWS를 쿼리하여 뷰가 마지막으로 새로고침된 시간과 마지막 자동 새로고침 시 오류가 발생했는지 확인합니다.

    SELECT
     table_name,
     last_refresh_time,
     refresh_watermark,
     last_refresh_status
    FROM
     `PROJECT_ID.DATASET`.INFORMATION_SCHEMA.MATERIALIZED_VIEWS
    WHERE
     table_name = 'MATERIALIZED_VIEW';

    last_refresh_statusNULL이 아니면 마지막 자동 새로고침 작업이 실패한 것입니다. last_refresh_timeNULL이거나 오래된 경우 구체화된 뷰가 새로고침을 성공적으로 완료한 적이 없거나 새로고침에 실패한 것입니다.

  3. 새로고침 작업 기록 및 오류 검사 INFORMATION_SCHEMA.JOBS_BY_PROJECT를 쿼리하여 최근 자동 새로고침 작업을 검사합니다.

    SELECT
     job_id,
     creation_time,
     end_time,
     state,
     error_result.reason AS error_reason,
     error_result.message AS error_message,
     total_slot_ms,
     total_bytes_processed
    FROM
     `region-REGION`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
    WHERE
     job_id LIKE '%materialized_view_refresh_%'
     AND creation_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
    ORDER BY
     creation_time DESC
    LIMIT 50;

    REGION을 데이터 세트의 리전으로 바꿉니다(예: us 또는 europe-west3).

  4. 쿼리 실행 및 스마트 조정 통계 살펴보기 쿼리가 예상보다 느리게 실행되는 경우 작업 통계의 materialized_view_statistics 필드를 검사하여 쿼리 옵티마이저가 구체화된 뷰를 사용했는지 확인합니다.

    SELECT
     job_id,
     total_slot_ms,
     total_bytes_billed,
     materialized_view_statistics
    FROM
     `region-REGION`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
    WHERE
     job_id = 'JOB_ID';

    JOB_ID를 쿼리 작업 ID로 바꿉니다.

구체화된 뷰 생성 오류 문제 해결

이 섹션에서는 구체화된 뷰를 만들 때 발생할 수 있는 오류와 원인 및 해결 단계를 설명합니다.

지원되지 않는 SQL 연산자 또는 문법

오류 메시지:

Unsupported operator in materialized view: KEYWORD

또는

Materialized view queries do not support FEATURE

원인:

증분 구체화된 뷰는 증분 유지관리 및 스마트 미세 조정을 지원하기 위해 제한된 SQL 구문 하위 집합을 지원합니다. 구체화된 뷰를 정의하는 쿼리에 다음과 같은 지원되지 않는 기능이 포함된 경우 이 오류가 발생할 수 있습니다.

  • 비확정적 함수 (예: CURRENT_TIMESTAMP(), RAND(), SESSION_USER())
  • OVER()를 사용한 분석 윈도우 함수
  • ORDER BY 또는 LIMIT
  • 집계가 없는 DISTINCT
  • WHERE 또는 SELECT 절의 서브 쿼리
  • 사용자 정의 함수(UDF)

해결 방법:

  • 지원되지 않는 SQL 기능 목록을 검토합니다.
  • 쿼리에 더 광범위한 SQL 기능이 필요한 경우 allow_non_incremental_definition = true을 설정하고 max_staleness 간격을 정의하여 비증분 구체화된 뷰를 만드는 것이 좋습니다.

    CREATE MATERIALIZED VIEW `PROJECT_ID.DATASET.MATERIALIZED_VIEW`
    OPTIONS (
    enable_refresh = true,
    refresh_interval_minutes = 60,
    max_staleness = INTERVAL "4" HOUR,
    allow_non_incremental_definition = true
    ) AS
    SELECT
    ...

    다음을 바꿉니다.

    • PROJECT_ID: 구체화된 뷰가 포함된 프로젝트입니다.
    • DATASET: 구체화된 뷰가 포함된 데이터 세트입니다.
    • MATERIALIZED_VIEW: 구체화된 뷰의 이름입니다.

    비증분 구체화된 뷰는 더 광범위한 SQL 쿼리를 지원하지만 항상 전체 새로고침을 실행하며 스마트 미세 조정을 지원하지 않습니다.

  • 필요한 SQL 문법이 증분 외 구체화된 뷰에서 지원되지 않는 경우 논리 뷰 또는 예약된 쿼리를 사용하여 결과를 대상 테이블에 씁니다.

CDC 기본 테이블의 max_staleness가 잘못됨

오류 메시지:

Materialized view PROJECT_ID:DATASET.MATERIALIZED_VIEW has a CDC table as base table PROJECT_ID:DATASET.TABLE but does not have valid max_staleness. Materialized views over CDC tables must have max_staleness set at least 2 times the base table's max_staleness: 0-0 0 0:0:0

원인:

변경 데이터 캡처 (CDC) 기본 테이블에 구체화된 뷰를 만들 때 구체화된 뷰의 max_staleness 옵션은 기본 테이블의 max_staleness 값의 두 배 이상으로 구성해야 합니다.

해결 방법:

  1. INFORMATION_SCHEMA.TABLE_OPTIONS를 쿼리하여 기본 CDC 테이블의 max_staleness 값을 확인합니다.
  2. 구체화된 뷰의 max_staleness 옵션을 기본 테이블의 max_staleness 값의 2배 이상인 값으로 설정합니다. 예를 들어 기본 CDC 테이블의 max_staleness 값이 15분인 경우 구체화된 뷰의 max_staleness 값을 30분 이상으로 설정합니다. 자세한 내용은 GoogleSQL의 데이터 정의 언어 (DDL) 문의 'ALTER MATERIALIZED VIEW SET OPTIONS 문'을 참고하세요.

파티션을 나누지 않은 기본 테이블에 대한 파티션을 나눈 구체화된 뷰

오류 메시지:

Partitioned incremental materialized view must be created on top of partitioned managed storage base table.

원인:

파티션이 지정된 증분 구체화된 뷰를 만들려면 기본 테이블도 파티션이 지정되어야 하며 구체화된 뷰의 파티션을 나누는 열이 기본 테이블의 파티션을 나누는 열과 정렬되어야 합니다.

해결 방법:

  • 구체화된 뷰의 파티션을 나누려면 기본 테이블의 파티션을 나누고 동일한 파티션 나누기 열을 사용하도록 구체화된 뷰를 구성하세요. 자세한 내용은 파티션 정렬을 참조하세요.
  • 기본 테이블이 파티션을 나누지 않은 경우 PARTITION BY 절 없이 구체화된 뷰를 만듭니다.
  • 파티션을 나누지 않은 테이블에 파티션을 나눈 뷰가 필요한 경우 allow_non_incremental_definition = truemax_staleness를 사용하여 비증분 구체화된 뷰를 만드세요. 비증분 구체화된 뷰는 기본 테이블과의 파티션 정렬이 필요하지 않습니다.

리전 간 데이터 세트 복제본은 읽기 전용입니다.

오류 메시지:

The dataset replica of the cross region dataset 'PROJECT_ID:DATASET' in region 'REGION' is read-only because it's not the primary replica.

원인:

리전 간 데이터 세트 복제를 사용하면 보조 복제본이 읽기 전용이 됩니다. 보조 복제본 리전에서는 구체화된 뷰를 만들 수 없습니다.

해결 방법:

복제된 데이터 세트의 기본 리전에 구체화된 뷰를 만듭니다. 복제본 리전에 구체화된 뷰가 필요한 경우 해당 리전에 구체화된 뷰 복제본을 만드세요. 자세한 내용은 구체화된 뷰 복제본 관리를 참고하세요.

기본 테이블 한도 초과

오류 메시지:

Materialized views support at most 10 source tables, query has NUMBER_OF_SOURCE_TABLES

원인:

BigQuery 구체화된 뷰는 최대 10개의 기본 테이블 간 조인을 지원합니다.

해결 방법:

구체화된 뷰를 정의하는 쿼리를 리팩터링하여 10개 이하의 기본 테이블을 참조합니다. 아키텍처에서 10개 이상의 테이블을 조인해야 하는 경우 정적 테이블이나 측정기준 테이블을 중간 테이블에 사전 조인하거나 예약된 쿼리 또는 Dataform 파이프라인을 사용하는 것이 좋습니다.

구체화된 뷰 생성 중 리소스 초과

오류 메시지:

Resources exceeded during query execution: The data accessed in this query is too large; consider accessing fewer tables, or for partitioned tables, fewer partitions.

원인:

구체화된 뷰를 만들면 BigQuery에서 뷰를 채우기 위해 초기 전체 새로고침을 실행합니다. 기본 기본 테이블에 파티셔닝되지 않은 데이터가 대량으로 포함되어 있거나 뷰에서 카디널리티가 높은 중간 집계가 생성되는 경우 초기 새로고침이 슬롯 메모리 또는 쿼리 한도를 초과할 수 있습니다.

해결 방법:

  • 구체화된 뷰의 WHERE 절에 필터 조건을 추가하여 스캔된 데이터의 범위를 필요한 하위 집합으로 제한합니다.
  • 새로고침 중에 파티션을 삭제하려면 구체화된 뷰 파티셔닝을 기본 테이블 파티셔닝과 정렬하세요.
  • 주문형 컴퓨팅을 사용하는 경우 대규모 새로고침에 충분한 컴퓨팅 용량을 제공하기 위해 전용 슬롯 예약이 있는 BigQuery 버전을 사용하는 것이 좋습니다.

BigLake 테이블 및 메타데이터 캐싱 관련 문제

증상

BigLake 외부 테이블에 대한 구체화된 뷰가 생성 중에 실패하거나 새로고침에 실패합니다.

원인:

외부 테이블에 대한 구체화된 뷰에는 다음과 같은 특정 아키텍처 요구사항이 있습니다.

  • 구체화된 뷰는 메타데이터 캐싱이 사용 설정된 BigLake 테이블에서만 지원됩니다.
  • 구체화된 뷰의 max_staleness 값은 기본 BigLake 기본 테이블의 max_staleness 값보다 커야 합니다.
  • 구체화된 뷰는 BigLake 외부 테이블 또는 BigQuery 관리형 스토리지 테이블을 참조할 수 있지만 단일 구체화된 뷰에서 유형을 혼합할 수는 없습니다.

해결 방법:

  1. 모든 기본 BigLake 기본 테이블에서 메타데이터 캐싱이 사용 설정되어 있는지 확인합니다.
  2. 구체화된 뷰의 max_staleness를 기본 테이블의 메타데이터 캐시 간격보다 높은 값으로 구성합니다. 예를 들어 기본 테이블 캐시 간격이 30분인 경우 새로고침 실행을 위한 버퍼를 허용하도록 구체화된 뷰의 max_staleness를 최소 45분으로 설정합니다.
  3. 구체화된 뷰 정의에 외부 테이블과 관리형 테이블을 혼합하지 마세요.

새로고침 문제 해결

이 섹션에서는 구체화된 뷰의 새로고침 실패 및 성능 지연의 일반적인 원인을 설명합니다.

기본 테이블 스키마 변경사항 (invalidQuery)

증상

INFORMATION_SCHEMA.MATERIALIZED_VIEWSlast_refresh_status 열에 invalidQuery 오류가 표시되고 자동 새로고침이 중지됩니다.

원인:

구체화된 뷰에서 참조하는 열을 삭제하거나, 열 이름을 바꾸거나, 열의 데이터 유형을 변경하는 등 기본 테이블의 스키마가 변경되면 구체화된 뷰를 정의하는 기본 쿼리가 무효화됩니다.

해결 방법:

BigQuery는 기존 구체화된 뷰의 열 스키마 변경을 지원하지 않습니다. 스키마 무효화를 해결하려면 다음 단계를 따르세요.

  1. CREATE OR REPLACE MATERIALIZED VIEW을 사용하여 구체화된 뷰를 다시 만듭니다.

    CREATE OR REPLACE MATERIALIZED VIEW `PROJECT_ID.DATASET.MATERIALIZED_VIEW`
    OPTIONS (
     enable_refresh = true,
     refresh_interval_minutes = 30
    ) AS
    SELECT
     ...

    다음을 바꿉니다.

    • PROJECT_ID: 구체화된 뷰가 포함된 프로젝트입니다.
    • DATASET: 구체화된 뷰가 포함된 데이터 세트입니다.
    • MATERIALIZED_VIEW: 구체화된 뷰의 이름입니다.
  2. 새 정의가 업데이트된 기본 테이블 스키마와 일치하는지 확인합니다.

기본 테이블 파티션 만료, 자르기 또는 DML 변경

증상

구체화된 뷰 새로고침이 실패하거나 구체화된 뷰에 대한 쿼리가 기본 테이블로 대체되어 느리게 실행됩니다.

원인:

다음 기본 테이블 작업은 기존 구체화된 뷰 데이터를 무효화합니다.

  • 기본 테이블 또는 기본 테이블 파티션 자르기 (TRUNCATE TABLE)
  • 기본 테이블의 파티션 만료
  • 파티션이 없는 테이블 또는 보조 조인 기본 테이블에 대한 DELETE 또는 MERGE 데이터 조작 언어 (DML) 문

이러한 작업이 발생하면 영향을 받는 파티션 (또는 파티션을 나누지 않은 테이블의 경우 전체 구체화된 뷰)이 무효로 표시됩니다.

해결 방법:

  1. 새로고침을 수동으로 트리거하여 구체화된 뷰를 유효한 상태로 복원합니다.

    CALL BQ.REFRESH_MATERIALIZED_VIEW('PROJECT_ID.DATASET.MATERIALIZED_VIEW');
  2. DML 문을 실행하거나 데이터를 정기적으로 자르는 일괄 ETL 파이프라인을 실행하는 경우 자동 새로고침을 사용 중지하고 ETL 파이프라인이 끝날 때 BQ.REFRESH_MATERIALIZED_VIEW를 호출하세요. 자세한 내용은 자동 새로고침을 참고하세요.

시간 초과된 작업 새로고침

증상

새로고침 작업이 몇 시간 (최대 12시간) 동안 실행된 후 제한 시간 오류와 함께 실패합니다.

원인:

기본 테이블이 커지면 새로고침 중에 처리되는 데이터 양이 증가합니다. 구체화된 뷰 쿼리가 행을 필터링하지 않거나 전체 무효화로 인해 뷰에서 증분 업데이트를 실행할 수 없는 경우 새로고침마다 기본 테이블의 전체 스캔이 필요하므로 슬롯 시간이 소진될 수 있습니다.

해결 방법:

  • 구체화된 뷰의 WHERE 절에 필터 기준을 추가하여 불필요한 이전 데이터를 제한합니다.
  • 구체화된 뷰가 기본 테이블과 파티션 정렬되어 수정된 파티션만 점진적으로 새로고침되도록 합니다.
  • 새로고침 워크로드를 수용할 수 있는 충분한 용량으로 슬롯 예약을 할당합니다.

중복 새로고침 메시지

메시지:

Materialized view is already being refreshed.

원인:

JOIN 구체화된 뷰의 기본 테이블이 동시에 업데이트되거나 자동 새로고침이 이미 진행 중인 상태에서 수동 새로고침이 트리거되면 BigQuery는 동시 새로고침을 감지하고 중복 작업을 취소합니다.

해결 방법:

이 동작은 정상적이며 일시적입니다. 중복 처리를 방지하기 위해 중복 작업이 중지되며 중복 새로고침 시도에 대한 요금은 청구되지 않습니다. 별도의 조치가 필요하지 않습니다.

스트리밍 데이터 (쓰기 최적화 스토리지) 새로고침 지연

증상

속도가 빠른 스트리밍 데이터가 있는 기본 테이블에 대한 쿼리가 구체화된 뷰에 즉시 표시되지 않거나 쿼리가 기본 테이블로 대체됩니다.

원인:

Storage Write API를 사용하여 BigQuery로 스트리밍된 데이터는 처음에는 쓰기 최적화 스토리지 (스트리밍 버퍼)에 저장됩니다. 구체화된 뷰의 새로고침 작업은 데이터가 커밋되고 스트리밍 버퍼에서 최적화된 열 기반 스토리지로 변환된 후 데이터를 처리합니다.

실시간 일관성을 유지하기 위해 구체화된 뷰에서 읽는 쿼리는 구체화된 뷰에서 커밋된 데이터를 읽고 동시에 기본 테이블 스트리밍 버퍼에서 델타를 직접 읽습니다.

해결 방법:

  • 스트리밍 데이터의 실시간 읽기 일관성이 필요한 경우 쿼리 플래너는 구체화된 뷰 데이터를 기본 테이블 델타와 자동으로 결합합니다.
  • 실시간 일관성이 필요하지 않고 쿼리마다 스트리밍 버퍼를 스캔하지 않으려면 구체화된 뷰에서 max_staleness를 설정하세요(예: max_staleness = INTERVAL "15" MINUTE). 그러면 쿼리가 델타 처리 없이 사전 계산된 구체화된 뷰에서 직접 읽을 수 있습니다.

쿼리 성능 및 스마트 조정 문제 해결

이 섹션에서는 예상보다 느리게 실행되거나 스마트 조정이 적용되지 않는 쿼리의 문제를 해결하는 방법을 설명합니다.

스마트 튜닝 사용 확인

기본 테이블을 쿼리할 때 BigQuery는 스마트 미세 조정을 사용하여 성능을 개선하고 비용을 절감하는 경우 사용 가능한 구체화된 뷰를 사용하도록 쿼리를 자동으로 다시 작성합니다.

쿼리에서 구체화된 뷰를 사용했는지 확인하려면 쿼리 작업 세부정보에서 materialized_view_statistics 필드를 검사하거나 INFORMATION_SCHEMA.JOBS_BY_PROJECT를 쿼리합니다.

SELECT
  job_id,
  total_slot_ms,
  total_bytes_billed,
  mv.table_reference.dataset_id,
  mv.table_reference.table_id,
  mv.chosen,
  mv.rejected_reason
FROM
  `region-REGION`.INFORMATION_SCHEMA.JOBS_BY_PROJECT,
  UNNEST(materialized_view_statistics.materialized_view) AS mv
WHERE
  job_id = 'JOB_ID';

다음을 바꿉니다.

  • REGION: 데이터 세트의 리전입니다 (예: us 또는 europe-west3).
  • JOB_ID: 쿼리 작업 ID입니다.

materialized_view_statistics 객체에서 materialized_view 배열의 각 항목에는 다음 필드가 포함됩니다.

  • table_reference: 구체화된 뷰 후보를 식별합니다.
  • chosen: 쿼리 옵티마이저가 실행을 위해 구체화된 뷰를 선택했는지 (true) 아니면 거부했는지 (false)를 나타내는 불리언입니다.
  • estimated_bytes_saved: 구체화된 뷰를 사용하여 쿼리에서 스캔하지 않은 것으로 추정되는 바이트입니다.
  • rejected_reason: chosenfalse인 경우 옵티마이저가 구체화된 뷰를 거부한 이유를 지정합니다.

거부 이유 및 rejected_reason 열거형에 대한 자세한 내용은 구체화된 뷰가 거부된 이유 이해를 참고하세요.

구체화된 뷰가 거부되는 일반적인 이유

chosenfalse인 경우 rejected_reason 값을 검사하여 원인을 진단합니다.

rejected_reason 설명 해결 방법
NO_DATA 구체화된 뷰가 아직 새로고침되지 않았거나 초기 새로고침이 실패하여 캐시된 데이터가 없습니다. CALL BQ.REFRESH_MATERIALIZED_VIEW(...)을 사용하여 수동 새로고침을 트리거합니다.
COST 쿼리 옵티마이저가 구체화된 뷰를 쿼리하는 것보다 기본 테이블을 쿼리 (또는 쿼리 캐시에서 읽기)하는 것이 더 저렴하다고 추정했습니다. 쿼리 필터 및 파티션을 검토합니다. 기본 테이블 쿼리가 작은 파티션만 스캔하는 반면 구체화된 뷰가 여러 파티션에 걸쳐 있는 경우 기본 테이블을 직접 쿼리하는 것이 더 효율적일 수 있습니다.
BASE_TABLE_DATA_CHANGE 하나 이상의 기본 테이블의 데이터가 변경되어 구성된 오래된 데이터 기간 외부의 캐시된 데이터가 무효화되었습니다. 수동으로 새로고침하거나 max_staleness를 구성하여 쿼리가 기본 테이블로 대체되지 않고 비활성 데이터를 읽을 수 있도록 합니다.
BASE_TABLE_TRUNCATED 기본 테이블이 잘려 모든 구체화된 뷰 데이터가 무효화되었습니다. 데이터가 다시 채워진 후 구체화된 뷰를 새로고침합니다.
BASE_TABLE_EXPIRED_PARTITION 기본 테이블의 파티션이 만료되었습니다. 기본 테이블과 구체화된 뷰의 파티션 만료 설정이 일치하는지 확인하고 뷰를 새로고침합니다.
BASE_TABLE_PARTITION_EXPIRATION_CHANGE 기본 테이블의 파티션 만료 기간이 수정되었습니다. 구체화된 뷰를 새로고침하여 파티션 만료 메타데이터를 다시 정렬합니다.
BASE_TABLE_INCOMPATIBLE_METADATA_CHANGE 기본 테이블에서 메타데이터 변경이 발생했습니다 (예: 스키마 수정). CREATE OR REPLACE MATERIALIZED VIEW를 사용하여 구체화된 뷰를 다시 만듭니다.
BASE_TABLE_TOO_STALE 기본 테이블의 캐시된 메타데이터 (예: BigLake 외부 테이블)가 허용된 기준보다 오래되었습니다. 외부 테이블의 메타데이터 캐시를 새로고침합니다.
BASE_TABLE_FINE_GRAINED_SECURITY_POLICY 쿼리 사용자에게 기본 테이블의 행 수준 또는 열 수준 액세스 제어 정책에 따른 액세스 권한이 없습니다. IAM 권한 및 데이터 정책 부여를 확인합니다.
TIME_ZONE 현재 쿼리의 시간대와 다른 시간대를 사용하여 뷰가 새로고침되었습니다. 환경과 새로고침 작업 간에 시간대 설정을 정렬합니다.

구체화된 뷰가 고려되지 않음 (쿼리 구조 불일치)

구체화된 뷰가 materialized_view_statistics에 나열되지 않으면 쿼리 패턴이 구체화된 뷰 정의와 일치하지 않는 것으로 구문 분석 중에 쿼리 최적화 프로그램이 판단한 것입니다.

일반적인 원인은 다음과 같습니다.

  1. 집계 또는 필터 불일치 쿼리에서 구체화된 뷰의 사전 계산된 집계에서 계산할 수 없는 집계 함수, 그룹화 열 또는 필터 조건자를 사용합니다.
    • 해결 방법: 쿼리와 구체화된 뷰 정의 간에 집계 함수와 그룹화를 정렬합니다.
  2. 비증분 구체화된 뷰 allow_non_incremental_definition = true로 만든 뷰는 스마트 조정이 지원되지 않습니다.
    • 해결 방법: FROM 절에 뷰 이름을 지정하여 비증분 구체화된 뷰를 직접 쿼리합니다.
  3. 오래된 뷰에 대한 직접 쿼리 max_staleness가 설정된 구체화된 뷰를 직접 쿼리하면 기본 테이블의 델타 처리 없이 max_staleness까지 사전 계산된 비활성 결과가 반환됩니다.

호환되지 않는 HyperLogLog 스케치 오류

오류 메시지:

Invalid or incompatible sketch in HLL_COUNT.MERGE_PARTIAL

원인:

HLL_COUNT.INITHLL_COUNT.MERGE_PARTIAL과 같은 근사치 집계 함수를 사용하면 BigQuery에서 HyperLogLog 스케치를 사용합니다. 쿼리에 지정된 정밀도 매개변수가 구체화된 뷰에 정의된 정밀도 매개변수와 일치하지 않으면 스케치 병합 작업이 실패합니다.

해결 방법:

구체화된 뷰 정의와 뷰를 참조하거나 뷰로 다시 작성하는 쿼리에서 정밀도 매개변수 (예: HLL_COUNT.INIT(x, 12))가 동일해야 합니다.

뷰 변경 및 스키마 수정 문제 해결

이 섹션에서는 구체화된 뷰의 스키마 또는 옵션을 수정할 때 발생할 수 있는 문제를 설명합니다.

구체화된 뷰 스키마 편집

문제:

ALTER TABLE 또는 Google Cloud 콘솔을 사용하여 구체화된 뷰에 열을 추가하거나 수정하려고 하면 오류가 발생하거나 스키마 수정 옵션을 사용할 수 없습니다.

원인:

BigQuery는 구체화된 뷰의 열 스키마를 직접 수정하는 것을 지원하지 않습니다.

해결 방법:

  • ALTER MATERIALIZED VIEW SET OPTIONS 문을 사용하여 구체화된 뷰 옵션 (예: enable_refresh, refresh_interval_minutes, max_staleness)을 수정할 수 있습니다.

    ALTER MATERIALIZED VIEW `PROJECT_ID.DATASET.MATERIALIZED_VIEW`
    SET OPTIONS (
    enable_refresh = true,
    refresh_interval_minutes = 20
    );

    다음을 바꿉니다.

    • PROJECT_ID: 구체화된 뷰가 포함된 프로젝트입니다.
    • DATASET: 구체화된 뷰가 포함된 데이터 세트입니다.
    • MATERIALIZED_VIEW: 구체화된 뷰의 이름입니다.
  • SQL 쿼리 정의를 변경하거나, 열을 추가하거나, 열 데이터 유형을 변경하려면 CREATE OR REPLACE MATERIALIZED VIEW를 사용하여 뷰를 다시 만드세요.

    CREATE OR REPLACE MATERIALIZED VIEW `PROJECT_ID.DATASET.MATERIALIZED_VIEW`
    AS SELECT
    ...

다음 단계