two-thirteen
BigQuery 파티션 필터 필수 옵션, 비싼 쿼리를 문 앞에서 막기
BigQuery 파티션 필터 필수 옵션, 비싼 쿼리를 문 앞에서 막기
2026-11-05 Data Analytics

BigQuery 파티션 필터 필수 옵션, 비싼 쿼리를 문 앞에서 막기

BigQuery 분할 테이블에 파티션 필터를 필수로 거는 옵션이 무엇을 하는지, SQL과 bq로 켜는 방법, 걸렸을 때의 오류와 알아 둘 제약을 공식 문서에서 확인해 정리한 메모입니다.

분할 테이블을 만들어 놓고도 WHERE 없이 전체를 읽는 쿼리가 하나 돌면 효과가 사라집니다. 사람은 실수하게 마련이라, 실수를 막는 장치를 테이블에 거는 쪽이 낫습니다.

BigQuery에는 이를 위한 옵션이 있습니다. require_partition_filter입니다.

하는 일

옵션을 켜면 그 테이블을 읽는 쿼리는 파티션 열에 대한 조건을 반드시 달아야 합니다. 문서의 표현으로는 파티션 열만 참조하는 조건이 적어도 하나 있어야 합니다.

조건이 없으면 쿼리가 실행되지 않고 오류가 납니다.

Cannot query over table 'project_id.dataset.table' without a filter that can be used for partition elimination.

문서는 이 요구가 성능을 높이고 비용을 줄일 수 있다고 설명합니다. 조건 덕분에 필요한 파티션만 읽기 때문입니다. 이 테이블을 참조하는 뷰와 머티리얼라이즈드 뷰에도 같은 요구가 적용됩니다.

켜는 법

SQL은 한 줄입니다.

ALTER TABLE mydataset.mypartitionedtable
  SET OPTIONS (
    require_partition_filter = true);

bq 명령으로도 됩니다.

bq update --require_partition_filter mydataset.mytable

다른 프로젝트의 테이블이면 프로젝트:데이터셋.테이블 형태로 적습니다.

알아 둘 것

  • 콘솔에서는 테이블을 만든 뒤에 이 옵션을 추가할 수 없습니다. 만들 때 정하거나, SQL·bq·API로 바꿔야 합니다.
  • API로 바꿀 때는 tables.update보다 tables.patch가 권장됩니다. update는 테이블 리소스 전체를 덮어쓰기 때문입니다.
  • 문서에는 켜는 예시만 있습니다. 끄는 SQL은 문서에서 확인하지 못해서 이 글에서는 다루지 않았습니다.

쓸지 말지

자주 읽는 큰 분할 테이블이라면 켜 둘 이유가 충분해 보입니다. 다만 분석가가 탐색용으로 가끔 전체를 훑어야 하는 테이블이라면 오류가 불편할 수 있습니다. 그런 곳은 이 옵션보다 쿼리 비용 상한을 거는 쪽을 먼저 보는 것이 맞을 수 있는데, 이 글에서는 그쪽은 확인하지 않았습니다.