컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

할당량 및 한도 오류 문제 해결

BigQuery에는 다양한 요청 및 작업의 비율과 볼륨을 제한하는 다양한 할당량 및 한도가 있습니다. 할당량 및 한도는 인프라를 보호하고 예상치 못한 고객 사용으로부터 보호하기 위해 존재합니다. 이 문서에서는 할당량 및 한도로 인한 특정 오류를 진단하고 완화하는 방법을 설명합니다.

이 문서에 나와 있지 않은 오류 메시지가 있다면 보다 일반적인 오류 정보가 포함된 오류 메시지 목록을 참조하세요.

개요

할당량 초과로 인해 BigQuery 작업이 실패하면 API는 HTTP 403 Forbidden 상태 코드를 반환합니다. 응답 본문에는 도달된 할당량에 대한 자세한 정보가 포함됩니다. 응답 본문은 다음과 유사합니다.

{
  "code" : 403,
  "errors" : [ {
    "domain" : "global",
    "message" : "Quota exceeded: ...",
    "reason" : "quotaExceeded"
  } ],
  "message" : "Quota exceeded: ..."
}

페이로드의 message 필드는 초과한 한도를 설명합니다. 예를 들어 message 필드에 Exceeded rate limits: too many table update operations for this table이 표시될 수 있습니다.

일반적으로 할당량 한도는 두 개의 카테고리로 구분되며 응답 페이로드의 reason 필드로 표시됩니다.

  • rateLimitExceeded 값은 단기 한도를 나타냅니다. 이러한 한도 문제를 해결하려면 몇 초 후에 작업을 다시 시도하세요. 재시도 사이에 지수 백오프를 사용하세요. 즉, 각 재시도 사이의 지연 시간을 기하급수적으로 늘립니다.

  • quotaExceeded. 이 값은 장기 한도를 나타냅니다. 장기 할당량 한도에 도달하면 10분 이상 기다려야 다시 작업을 시도할 수 있습니다. 이러한 장기 할당량 한도 중 하나에 지속적으로 도달하는 경우 워크로드를 분석하여 문제를 완화할 수 있는 방법을 파악해야 합니다. 완화 방법에는 워크로드 최적화 또는 할당량 상향 요청 등이 포함될 수 있습니다.

quotaExceeded 오류의 경우 오류 메시지를 검사하여 초과된 할당량 한도를 파악합니다. 그런 다음 워크로드를 분석하여 할당량 도달을 방지할 수 있는지 확인합니다. 예를 들어 쿼리 성능을 최적화하면 동시 쿼리의 할당량 오류를 완화할 수 있습니다.

경우에 따라 BigQuery 지원팀에 문의하거나 Google Cloud 영업팀에 문의하여 할당량을 늘릴 수 있지만 먼저 이 문서의 제안사항을 따르는 것이 좋습니다.

진단

문제를 진단하려면 다음 안내를 따르세요.

  • INFORMATION_SCHEMA를 사용하여 기본 문제를 분석합니다. 이러한 뷰에는 작업, 예약, 스트리밍 삽입을 포함하여 BigQuery 리소스에 대한 메타데이터가 포함됩니다.

    예를 들어 다음 쿼리는 INFORMATION_SCHEMA.JOBS 뷰를 사용하여 전날의 모든 할당량 관련 오류를 나열합니다.

    SELECT
     job_id,
     creation_time,
     error_result
    FROM `region-us`.INFORMATION_SCHEMA.JOBS
    WHERE creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP, INTERVAL 1 DAY) AND
          error_result.reason IN ('rateLimitExceeded', 'quotaExceeded')
    
  • Cloud 감사 로그에서 오류를 봅니다.

    예를 들어 로그 탐색기를 사용하는 경우 다음 쿼리는 메시지 문자열에서 Quota exceeded 또는 limit이 있는 오류를 반환합니다.

    resource.type = ("bigquery_project" OR "bigquery_dataset")
    protoPayload.status.code ="7"
    protoPayload.status.message: ("Quota exceeded" OR "limit")
    

    이 예시에서 상태 코드 7은 HTTP 403 상태 코드에 해당하는 PERMISSION_DENIED를 나타냅니다.

    추가 Cloud 감사 로그 쿼리 샘플은 BigQuery 쿼리를 참조하세요.

동시 쿼리 할당량 오류

프로젝트에서 프로젝트에 할당된 한도보다 더 많은 대화형 쿼리를 동시에 실행하는 경우 이 오류가 발생할 수 있습니다.

이 한도에 대한 자세한 내용은 최대 동시 대화형 쿼리 수 한도를 참조하세요.

오류 메시지

Exceeded rate limits: too many concurrent queries for this project_and_region

진단

이 오류를 반환하는 쿼리 작업을 확인하지 않았다면 다음을 수행합니다.

  • 실패한 쿼리와 동시에 실행되는 다른 쿼리를 확인합니다.

    예를 들어 실패한 쿼리가 2021-06-08 12:00:00 UTC에 us 리전에 제출되면 다음 쿼리를 실패한 쿼리가 제출된 프로젝트의 INFORMATION_SCHEMA.JOBS 테이블로 실행합니다.

    DECLARE failed_query_submission_time DEFAULT CAST('2021-06-08 12:00:00' AS TIMESTAMP);
    
    SELECT
     job_id,
     state,
     user_email,
     query
    FROM `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
    WHERE creation_time >= date_sub(failed_query_submission_time, INTERVAL 1 DAY)
    AND job_type = 'QUERY'
    AND priority = 'INTERACTIVE'
    AND start_time <= failed_query_submission_time
    AND (end_time >= failed_query_submission_time OR state != 'DONE')
    
  • 동일한 오류가 발생하여 INFORMATION_SCHEMA.JOBS_BY_PROJECT에 대한 쿼리가 실패하면 Cloud Shell 터미널에서 bq ls 명령어를 실행하여 실행 중인 쿼리를 나열합니다.

    bq ls -j --format=prettyjson -n 200 | jq '.[] | select(.status.state=="RUNNING")| {configuration: .query, id: .id, jobReference: .jobReference, user_email: .user_email}'

해결 방법

이 할당량 오류를 해결하려면 다음 안내를 따르세요.

  • 작업 일시중지. 앞의 진단에서 쿼리 증가를 담당하는 프로세스 또는 워크플로를 식별하는 경우 해당 프로세스 또는 워크플로를 일시중지합니다.

  • 일괄 우선순위가 있는 작업 사용. 일괄 쿼리는 동시 비율 제한에 반영되지 않습니다. 일괄 쿼리를 실행하면 한 번에 여러 쿼리를 시작할 수 있습니다. 일괄 쿼리는 대화형(주문형) 쿼리와 동일한 리소스를 사용합니다. BigQuery는 사용자를 대신하여 각 일괄 쿼리를 큐에 포함시키고 BigQuery 공유 리소스 풀에서 유휴 리소스를 사용할 수 있으면 쿼리를 시작합니다.

    또는 별도의 프로젝트를 만들어 쿼리를 실행할 수도 있습니다.

  • 쿼리 배포. 쿼리의 특성과 비즈니스 요구사항에 따라 여러 프로젝트에 부하를 구성하고 배포합니다.

  • 실행 시간 배포. 더 긴 기간에 걸쳐 로드를 분산합니다. 보고 솔루션에서 여러 쿼리를 실행해야 하는 경우 쿼리가 시작되는 시점을 무작위로 지정해 보세요. 예를 들어 모든 보고서를 동시에 시작하지 마세요.

  • BigQuery BI Engine 사용. 비즈니스 인텔리전스(BI) 도구를 사용하여 BigQuery에서 데이터를 쿼리하는 대시보드를 만드는 동안 이 오류가 발생한 경우 BigQuery BI Engine을 사용하는 것이 좋습니다. 이 사용 사례에는 BigQuery BI Engine을 사용하는 것이 가장 좋습니다.

  • 쿼리 및 데이터 모델 최적화. 쿼리가 더 효율적으로 실행되도록 다시 작성할 수 있는 경우가 많습니다. 예를 들어 쿼리에 여러 위치에서 참조되는 공통 테이블 표현식 (CTE)(WITH 절)이 포함되어 있으면 이 계산은 여러 번 수행됩니다. 임시 테이블에서 CTE를 사용하여 수행한 계산을 유지하고 쿼리에서 이를 참조하는 것이 좋습니다.

    또한 여러 조인이 효율성 부족의 원인이 될 수 있습니다. 이 경우 중첩 및 반복 열을 사용하는 것이 좋습니다. 이를 사용하면 데이터의 지역성이 개선되고, 일부 조인의 필요성이 없어지며, 리소스 소비와 쿼리 실행 시간이 전반적으로 줄어듭니다.

    쿼리를 최적화하면 비용이 더 저렴해지므로 정액제 가격 책정을 사용하면 슬롯에서 더 많은 쿼리를 실행할 수 있습니다. 자세한 내용은 쿼리 성능 최적화 소개를 참조하세요.

  • 쿼리 모델 최적화. BigQuery는 관계형 데이터베이스가 아닙니다. 무제한의 소규모 쿼리에 대해서는 최적화되지 않습니다. 다수의 소규모 쿼리를 실행하면 할당량이 빠르게 소진됩니다. 이러한 쿼리는 소규모 데이터베이스 제품만큼 효율적으로 실행되지 않습니다. BigQuery는 대규모 데이터 웨어하우스이며 기본 사용 사례입니다. 이 도구는 대량의 데이터에 대한 분석 쿼리를 수행할 때 가장 효과적입니다.

  • 데이터 유지(저장된 테이블). BigQuery에서 데이터를 사전 처리하고 추가 테이블에 저장합니다. 예를 들어 서로 다른 WHERE 조건으로 많고 비슷한 계산 집약적인 쿼리를 실행하면 결과가 캐시되지 않습니다. 이러한 쿼리는 실행될 때마다 리소스를 사용합니다. 데이터를 미리 계산하고 테이블에 저장하여 이러한 쿼리의 성능을 개선하고 처리 시간을 줄일 수 있습니다. 테이블에서 미리 계산된 데이터는 SELECT 쿼리로 쿼리할 수 있습니다. ETL 프로세스 내에서 또는 예약된 쿼리 또는 구체화된 뷰를 사용하여 수집 중에 수행할 수 있는 경우가 많습니다.

  • 할당량 한도 상향 조정. 할당량 한도를 늘려 이 오류를 해결할 수도 있습니다. 한도를 상향 조정하려면 지원팀 또는 영업팀에 문의하세요. 할당량 상향 조정을 처리하는 데 며칠이 걸릴 수 있습니다. 요청에 대한 추가 정보를 제공하려면 요청에 작업의 우선순위, 쿼리를 실행하는 사용자, 영향을 받은 메서드를 포함하는 것이 좋습니다.

    한도는 프로젝트 수준에서 적용됩니다. 하지만 프로젝트당 동시 작업 수를 늘리면 동시에 실행되는 각 쿼리에 사용할 수 있는 슬롯 수가 줄어들어 개별 쿼리의 성능이 저하될 수 있습니다. 성능을 향상시키기 위해 동시 쿼리 한도가 상향된 경우 슬롯 수를 늘리는 것이 좋습니다.

    한도 상향에 대한 자세한 내용은 할당량 및 한도를 참조하세요. 슬롯에 대한 자세한 내용은 슬롯 예약을 참조하세요.

열로 파티션을 나눈 테이블의 파티션 수정 횟수 할당량 오류

BigQuery에서는 열로 파티션을 나눈 테이블이 하루에 허용되는 파티션 수정 횟수 할당량에 도달하면 이 오류가 반환됩니다. 파티션 수정에는 대상 파티션을 추가 또는 덮어쓰거나 DML DELETE, INSERT, MERGE, TRUNCATE TABLE 또는 UPDATE 문을 사용하여 테이블에 데이터를 작성하는 모든 로드 작업, 복사 작업, 쿼리 작업의 합계가 포함됩니다.

열로 파티션을 나눈 테이블당 일일 파티션 수정 횟수 한도 값을 보려면 파티션을 나눈 테이블을 참조하세요.

오류 메시지

Quota exceeded: Your table exceeded quota for
Number of partition modifications to a column partitioned table
해결 방법

이 할당량은 상향 조정할 수 없습니다. 이 할당량 오류를 해결하려면 다음 안내를 따르세요.

  • 총 파티션 수를 줄이기 위해 각 파티션에 더 많은 데이터가 포함되도록 테이블에서 파티션 나누기를 변경합니다. 예를 들어 일별 파티션 나누기를 월별 파티션 나누기로 변경하거나 테이블 파티션 나누기 방법을 변경합니다.
  • 파티션 나누기 대신 클러스터링을 사용합니다.
  • 파일당 작업을 사용하는 Cloud Storage에 저장된 여러 개의 작은 파일에서 데이터를 자주 로드하는 경우 여러 로드 작업을 단일 작업으로 결합합니다. 쉼표로 구분된 목록(예: gs://my_path/file_1,gs://my_path/file_2) 또는 와일드 카드(예: gs://my_path/*)를 사용하여 여러 Cloud Storage URI에서 로드할 수 있습니다.

    자세한 내용은 데이터 일괄 로드를 참조하세요.

  • 단일 행 쿼리(즉, INSERT 문)를 사용하여 테이블에 데이터를 쓰는 경우 여러 쿼리를 하나로 일괄 처리하여 작업 수를 줄이는 것이 좋습니다. BigQuery는 관계형 데이터베이스로 사용될 때 잘 작동하지 않으므로 고속으로 실행되는 단일 행 INSERT 문은 권장되지 않습니다.
  • 빠른 속도로 데이터를 삽입하려면 BigQuery Storage Write API를 사용하는 것이 좋습니다. 이 솔루션은 고성능 데이터 수집에 권장되는 솔루션입니다. BigQuery Storage Write API는 정확히 한 번의 전송 시맨틱스를 포함한 강력한 기능을 제공합니다. 한도 및 할당량에 대한 자세한 내용은 Storage Write API를 참조하고, 이 API 사용 비용을 확인하려면 BigQuery 데이터 수집 가격 책정을 참조하세요.

스트리밍 삽입 할당량 오류

이 섹션에서는 BigQuery에 데이터 스트리밍과 관련된 할당량 오류 문제를 해결하기 위한 몇 가지 팁을 제공합니다.

특정 리전에서 각 행의 insertId 필드를 채우지 않으면 스트리밍 삽입의 할당량이 증가합니다. 스트리밍 삽입의 할당량에 대한 자세한 내용은 스트리밍 삽입을 참조하세요. BigQuery 스트리밍의 할당량 관련 오류는 insertId 존재 여부에 따라 다릅니다.

오류 메시지

insertId 필드가 비어 있으면 다음과 같은 할당량 오류가 발생할 수 있습니다.

할당량 한도 오류 메시지
프로젝트별 초당 바이트 수 REGION 리전의 PROJECT_ID 프로젝트에서 gaia_id가 GAIA_ID인 항목이 초당 삽입 바이트 수 할당량을 초과했습니다.

insertId 필드가 채워져 있으면 다음과 같은 할당량 오류가 발생할 수 있습니다.

할당량 한도 오류 메시지
프로젝트별 초당 행 수 REGIONPROJECT_ID 프로젝트가 초당 스트리밍 삽입 행 수 할당량을 초과했습니다.
테이블별 초당 행 수 TABLE_ID 테이블이 초당 스트리밍 삽입 행 수 할당량을 초과했습니다.
테이블별 초당 바이트 수 TABLE_ID 테이블이 초당 스트리밍 삽입 바이트 수 할당량을 초과했습니다.

insertId 필드의 목적은 삽입된 행의 중복을 삭제하는 것입니다. 동일한 insertId의 삽입이 몇 분 안에 여러 번 도착하면 BigQuery는 레코드의 단일 버전을 작성합니다. 하지만 이러한 자동 중복 삭제는 보장되지 않습니다. 스트리밍 처리량을 극대화하기 위해 insertId를 포함하지 말고 수동 중복 삭제를 대신 사용하는 것이 좋습니다. 자세한 내용은 데이터 일관성 확인을 참조하세요.

진단

스트리밍 트래픽을 분석하려면 STREAMING_TIMELINE_BY_* 뷰를 사용합니다. 이러한 뷰는 1분 간격으로 스트리밍 통계를 집계하며 오류 코드를 기준으로 그룹화됩니다. 할당량 오류는 RATE_LIMIT_EXCEEDED 또는 QUOTA_EXCEEDED와 동일한 error_code와 함께 결과에 표시됩니다.

도달한 특정 할당량 한도에 따라 total_rows 또는 total_input_bytes를 확인하세요. 오류가 테이블 수준 할당량인 경우 table_id로 필터링합니다.

예를 들어 다음 쿼리는 분당 수집된 총 바이트 수와 총 할당량 오류 수를 표시합니다.

SELECT
 start_timestamp,
 error_code,
 SUM(total_input_bytes) as sum_input_bytes,
 SUM(IF(error_code IN ('QUOTA_EXCEEDED', 'RATE_LIMIT_EXCEEDED'),
     total_requests, 0)) AS quota_error
FROM
 `region-us`.INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT
WHERE
  start_timestamp > TIMESTAMP_SUB(CURRENT_TIMESTAMP, INTERVAL 1 DAY)
GROUP BY
 start_timestamp,
 error_code
ORDER BY 1 DESC

해결 방법

이 할당량 오류를 해결하려면 다음 안내를 따르세요.

  • 중복 삭제에 insertId 필드를 사용 중이고 프로젝트가 더 높은 스트리밍 할당량을 지원하는 리전에 있는 경우 insertId 필드를 삭제하는 것이 좋습니다. 이 해결책에는 데이터를 수동으로 중복 삭제하기 위한 단계가 추가로 필요할 수 있습니다. 자세한 내용은 수동으로 중복 삭제를 참조하세요.

  • insertId를 사용하지 않거나 삭제할 수 없는 경우 24시간 동안 스트리밍 트래픽을 모니터링하고 할당량 오류를 분석합니다.

    • 대부분 QUOTA_EXCEEDED 오류 대신 RATE_LIMIT_EXCEEDED 오류가 발생하고 전체 트래픽이 할당량의 80% 미만이면 이 오류는 일시적인 급증을 나타낼 수 있습니다. 작업 재시도 사이에 지수 백오프를 사용하는 작업 재시도로 이러한 오류를 처리할 수 있습니다.

    • Dataflow 작업을 사용하여 데이터를 삽입하는 경우 스트리밍 삽입 대신 로드 작업을 사용하는 것이 좋습니다. 자세한 내용은 삽입 방식 설정을 참조하세요. 커스텀 I/O 커넥터와 함께 Dataflow를 사용하는 경우 기본 제공 I/O 커넥터를 사용하는 것이 좋습니다. 자세한 내용은 커스텀 I/O 패턴을 참조하세요.

    • QUOTA_EXCEEDED 오류가 표시되거나 전체 트래픽이 지속적으로 할당량의 80%를 초과하는 경우 할당량 상향 요청을 제출하세요. 자세한 내용은 더 높은 할당량 한도 요청을 참조하세요.

    • 또한 스트리밍 삽입을 처리량이 높고 가격이 저렴하며 유용한 기능이 많은 최신 Storage Write API로 대체를 고려할 수도 있습니다.

CSV 파일 로드 할당량 오류

--allow_quoted_newlines 플래그와 함께 bq load 명령어를 사용하여 대용량 CSV 파일을 로드하는 경우 이 오류가 발생할 수 있습니다.

오류 메시지

Input CSV files are not splittable and at least one of the files is larger than
the maximum allowed size. Size is: ...

해결 방법

이 할당량 오류를 해결하려면 다음 안내를 따르세요.

  • --allow_quoted_newlines 플래그를 false로 설정합니다.
  • 4GB 미만의 작은 단위로 CSV 파일을 분할합니다.

BigQuery에 데이터를 로드할 때 적용되는 한도에 대한 자세한 내용은 로드 작업을 참조하세요.

테이블 가져오기 또는 쿼리 추가 할당량 오류

BigQuery에서는 테이블이 표준 테이블의 일일 테이블 작업 한도에 도달하면 이 오류가 반환됩니다. 테이블 작업에는 대상 테이블에 데이터를 추가하거나 대상 파티션을 덮어쓰거나 DML DELETE, INSERT, MERGE, TRUNCATE TABLE 또는 UPDATE 문을 사용하여 테이블에 데이터를 쓰는 모든 로드 작업, 복사 작업, 쿼리 작업의 합계가 포함됩니다.

일일 테이블 작업 한도 값을 보려면 표준 테이블을 참조하세요.

오류 메시지

Your table exceeded quota for imports or query appends per table

진단

대부분의 테이블 작업이 시작되는 소스를 식별하지 않은 경우 다음을 수행하세요.

  1. 실패한 쿼리, 로드 또는 복사 작업에 기록되는 프로젝트, 데이터 세트, 테이블을 기록합니다.

  2. 테이블을 수정하는 작업에 대해 자세히 알아보려면 INFORMATION_SCHEMA.JOBS_BY_* 테이블을 사용하세요.

    다음 예시에서는 JOBS_BY_PROJECT를 사용하여 24시간 동안 작업 유형별로 그룹화된 시간당 작업 수를 찾습니다. 여러 프로젝트가 테이블에 기록되어야 하는 경우 JOBS_BY_PROJECTJOBS_BY_ORGANIZATION으로 바꿉니다.

    SELECT
      TIMESTAMP_TRUNC(creation_time, HOUR),
      job_type,
      count(1)
    FROM `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
    #Adjust time
    WHERE creation_time BETWEEN "2021-06-20 00:00:00" AND "2021-06-21 00:00:00"
    AND destination_table.project_id = "my-project-id"
    AND destination_table.dataset_id = "my_dataset"
    AND destination_table.table_id = "my_table"
    GROUP BY 1, 2
    ORDER BY 1 DESC
    

해결 방법

이 할당량은 상향 조정할 수 없습니다. 이 할당량 오류를 해결하려면 다음 안내를 따르세요.

  • 파일당 작업을 사용하는 Cloud Storage에 저장된 여러 개의 작은 파일에서 데이터를 자주 로드하는 경우 여러 로드 작업을 단일 작업으로 결합합니다. 쉼표로 구분된 목록(예: gs://my_path/file_1,gs://my_path/file_2) 또는 와일드 카드(예: gs://my_path/*)를 사용하여 여러 Cloud Storage URI에서 로드할 수 있습니다.

    자세한 내용은 데이터 일괄 로드를 참조하세요.

  • 단일 행 쿼리(즉, INSERT 문)를 사용하여 테이블에 데이터를 쓰는 경우 여러 쿼리를 하나로 일괄 처리하여 작업 수를 줄이는 것이 좋습니다. BigQuery는 관계형 데이터베이스로 사용될 때 잘 작동하지 않으므로 고속으로 실행되는 단일 행 INSERT 문은 권장되지 않습니다.
  • 빠른 속도로 데이터를 삽입하려면 BigQuery Storage Write API를 사용하는 것이 좋습니다. 이 솔루션은 고성능 데이터 수집에 권장되는 솔루션입니다. BigQuery Storage Write API는 정확히 한 번의 전송 시맨틱스를 포함한 강력한 기능을 제공합니다. 한도 및 할당량에 대한 자세한 내용은 Storage Write API를 참조하고, 이 API 사용 비용을 확인하려면 BigQuery 데이터 수집 가격 책정을 참조하세요.

최대 테이블 메타데이터 업데이트 작업 빈도의 한도 오류

BigQuery에서는 테이블이 표준 테이블의 테이블당 최대 테이블 메타데이터 업데이트 작업 빈도의 한도에 도달하면 이 오류가 반환됩니다. 테이블 작업에는 대상 테이블에 데이터를 추가하거나 대상 파티션을 덮어쓰거나 DML DELETE, INSERT, MERGE, TRUNCATE TABLE 또는 UPDATE를 사용하여 테이블에 데이터를 쓰는 모든 로드 작업, 복사 작업, 쿼리 작업의 합계가 포함됩니다.

테이블당 최대 테이블 메타데이터 업데이트 작업 빈도의 한도 값을 보려면 표준 테이블을 참조하세요.

오류 메시지

Exceeded rate limits: too many table update operations for this table

진단

메타데이터 테이블 업데이트는 테이블의 메타데이터를 수정하는 API 호출 또는 테이블의 콘텐츠를 수정하는 작업에서 발생할 수 있습니다. 테이블의 메타데이터에 대한 대부분의 업데이트 작업이 시작되는 소스를 식별하지 않은 경우 다음을 수행합니다.

API 호출 식별

  1. Google Cloud 탐색 메뉴 로 이동하고 Logging > 로그 탐색기를 선택합니다.

    로그 탐색기로 이동

  2. 다음 쿼리를 실행하여 테이블 작업을 볼 수 있도록 로그를 필터링합니다.

    resource.type="bigquery_dataset"
    protoPayload.resourceName="projects/my-project-id/datasets/my_dataset/tables/my_table"
    (protoPayload.methodName="google.cloud.bigquery.v2.TableService.PatchTable" OR
    protoPayload.methodName="google.cloud.bigquery.v2.TableService.UpdateTable" OR
    protoPayload.methodName="google.cloud.bigquery.v2.TableService.InsertTable")
    

작업 확인

다음 쿼리는 프로젝트에서 영향을 받은 테이블을 수정하는 작업 목록을 반환합니다. 조직의 여러 프로젝트가 테이블에 기록되어야 하는 경우 JOBS_BY_PROJECTJOBS_BY_ORGANIZATION으로 바꿉니다.

SELECT
 job_id,
 user_email,
 query
#Adjust region
FROM `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
#Adjust time
WHERE creation_time BETWEEN "2021-06-21 10:00:00" AND "2021-06-21 20:00:00"
AND destination_table.project_id = "my-project-id"
AND destination_table.dataset_id = "my_dataset"
AND destination_table.table_id = "my_table"

자세한 내용은 BigQuery 감사 로그 개요를 참조하세요.

해결 방법

이 할당량은 상향 조정할 수 없습니다. 이 할당량 오류를 해결하려면 다음 안내를 따르세요.

  • 테이블 메타데이터의 업데이트 빈도를 줄입니다.
  • 작업 또는 테이블 작업 사이에 지연을 추가하여 업데이트 빈도가 제한 범위 내에 있는지 확인합니다.
  • 데이터 삽입 또는 수정의 경우 DML 작업을 사용하는 것이 좋습니다. DML 작업은 테이블당 최대 테이블 메타데이터 업데이트 작업 빈도 비율 제한의 영향을 받지 않습니다.

    DML 작업에는 다른 한도와 할당량이 있습니다. 자세한 내용은 데이터 조작 언어(DML) 사용을 참조하세요.

  • 파일당 작업을 사용하는 Cloud Storage에 저장된 여러 개의 작은 파일에서 데이터를 자주 로드하는 경우 여러 로드 작업을 단일 작업으로 결합합니다. 쉼표로 구분된 목록(예: gs://my_path/file_1,gs://my_path/file_2) 또는 와일드 카드(예: gs://my_path/*)를 사용하여 여러 Cloud Storage URI에서 로드할 수 있습니다.

    자세한 내용은 데이터 일괄 로드를 참조하세요.

  • 단일 행 쿼리(즉, INSERT 문)를 사용하여 테이블에 데이터를 쓰는 경우 여러 쿼리를 하나로 일괄 처리하여 작업 수를 줄이는 것이 좋습니다. BigQuery는 관계형 데이터베이스로 사용될 때 잘 작동하지 않으므로 고속으로 실행되는 단일 행 INSERT 문은 권장되지 않습니다.
  • 빠른 속도로 데이터를 삽입하려면 BigQuery Storage Write API를 사용하는 것이 좋습니다. 이 솔루션은 고성능 데이터 수집에 권장되는 솔루션입니다. BigQuery Storage Write API는 정확히 한 번의 전송 시맨틱스를 포함한 강력한 기능을 제공합니다. 한도 및 할당량에 대한 자세한 내용은 Storage Write API를 참조하고, 이 API 사용 비용을 확인하려면 BigQuery 데이터 수집 가격 책정을 참조하세요.

최대 API 요청 수 한도 오류

BigQuery API에 대한 메서드별 사용자별 API 요청 수의 비율 제한에 도달하면 BigQuery에서 이 오류가 반환됩니다(예: 서비스 계정에서 tables.get 메서드 호출 또는 다른 사용자 이메일에서 jobs.insert 메서드 호출). 자세한 내용은 모든 BigQuery API메서드별 사용자별 초당 최대 API 요청 수 비율 제한을 참조하세요.

오류 메시지

Too many API requests per user per method for this user_method

진단

이 비율 제한에 도달한 메서드를 찾지 못한 경우 다음을 수행하세요.

서비스 계정의 경우

  1. 서비스 계정을 호스팅하는 프로젝트로 이동합니다.

  2. Google Cloud 콘솔에서 API 대시보드로 이동합니다.

    API의 자세한 사용량 정보를 보는 방법은 API 대시보드 사용을 참조하세요.

  3. API 대시보드에서 BigQuery API를 선택합니다.

  4. 자세한 사용량 정보를 보려면 측정항목을 선택한 후 다음을 수행합니다.

    1. 그래프 선택에서 API 메서드별 트래픽을 선택합니다.

    2. 서비스 계정의 사용자 인증 정보별로 차트를 필터링합니다. 오류가 발생한 기간에 메서드가 급증할 수 있습니다.

API 호출의 경우

일부 API 호출은 Cloud Logging의 BigQuery 감사 로그에 오류를 로깅합니다. 한도에 도달한 메서드를 확인하려면 다음을 수행합니다.

  1. Google Cloud 콘솔에서 Google Cloud 탐색 메뉴 로 이동한 다음 프로젝트에 대해 로깅 > 로그 탐색기를 선택합니다.

    로그 탐색기로 이동

  2. 다음 쿼리를 실행하여 로그를 필터링합니다.

     resource.type="bigquery_resource"
     protoPayload.authenticationInfo.principalEmail="<user email or service account>"
     "Too many API requests per user per method for this user_method"
     In the log entry, you can find the method name under the property protoPayload.method_name.
     

    자세한 내용은 BigQuery 감사 로그 개요를 참조하세요.

해결 방법

이 할당량 오류를 해결하려면 다음 안내를 따르세요.

  • API 요청 수를 줄이거나 여러 API 요청 사이에 지연을 추가하여 요청 수가 이 한도를 넘지 않도록 합니다.

  • 한도를 가끔씩만 초과하는 경우 지수 백오프를 사용하여 이 특정 오류에 대한 재시도를 구현할 수 있습니다.

  • 스트리밍 삽입은 BigQuery API 할당량의 영향을 받지 않으므로 데이터를 자주 삽입하는 경우 스트리밍 삽입을 사용하는 것이 좋습니다. 하지만 스트리밍 삽입 API에는 이와 관련된 비용이 있으며 자체적인 한도 및 할당량이 있습니다.

    스트리밍 삽입 비용에 대한 자세한 내용은 BigQuery 가격 책정을 참조하세요.

  • BigQuery I/O 커넥터와 함께 Dataflow를 사용하여 BigQuery에 데이터를 로드하는 동안 tables.get 메서드에서 이 오류가 발생할 수 있습니다. 이 문제를 해결하려면 다음 단계를 따르세요.

    • 대상 테이블의 생성 처리를 CREATE_NEVER로 설정합니다. 자세한 내용은 생성 처리를 참조하세요.

    • Apache Beam SDK 버전 2.24.0 이상을 사용합니다. 이전 버전의 SDK에서 CREATE_IF_NEEDED 처리는 tables.get 메서드를 호출하여 테이블이 있는지 확인합니다.

  • 지원팀 또는 영업팀에 문의하여 할당량 증가를 요청할 수 있습니다. 추가 할당량은 할당량 상향 요청을 참조하세요. 할당량 상향 조정을 처리하는 데 며칠이 걸릴 수 있습니다. 요청에 대한 추가 정보를 제공하려면 요청에 작업의 우선순위, 쿼리를 실행하는 사용자, 영향을 받은 메서드를 포함하는 것이 좋습니다.

프로젝트가 스캔된 무료 쿼리 바이트 할당량 초과

BigQuery에서는 무료 사용량 등급에서 쿼리를 실행하고 계정이 쿼리 가능한 월별 데이터 크기 한도에 도달하면 이 오류가 반환됩니다. 쿼리(분석)에 대한 자세한 내용은 무료 사용량 등급을 참조하세요.

오류 메시지

Your project exceeded quota for free query bytes scanned

해결 방법

BigQuery를 계속 사용하려면 계정을 유료 Cloud Billing 계정으로 업그레이드해야 합니다.

프로젝트별 초당 최대 tabledata.list 바이트 할당량 오류

BigQuery에서는 오류 메시지에 언급된 프로젝트 번호가 프로젝트에서 tabledata.list API 호출을 통해 읽을 수 있는 초당 최대 데이터 크기에 도달하면 이 오류가 반환됩니다. 분당 테이블 데이터 목록 바이트 한도에 대한 자세한 내용은 tabledata.list 요청을 참조하세요.

오류 메시지

Your project:[project number] exceeded quota for tabledata.list bytes per second per project

해결 방법

이 오류를 해결하려면 다음 안내를 따르세요.

  • 일반적으로 이 한도를 넘지 않는 것이 좋습니다. 예를 들어 지연 시간을 두고 더 긴 기간에 걸쳐 요청을 배치합니다. 오류가 자주 발생하지 않으면 지수 백오프로 재시도를 구현하면 이 문제가 해결됩니다.
  • 사용 사례가 테이블에서 대량의 데이터를 빠르고 자주 읽어야 하는 경우 tabledata.list API 대신 BigQuery Storage Read API를 사용하는 것이 좋습니다.
  • 위의 제안이 작동하지 않으면 다음을 수행하여 Google Cloud 콘솔 API 대시보드에서 할당량 증가를 요청할 수 있습니다.

    1. Google Cloud 콘솔 API 라이브러리로 이동합니다.
    2. 대시보드에서 할당량 Tabledata list bytes per minute (default quota)를 필터링합니다.
    3. 할당량을 선택하고 할당량 한도 상향 요청의 안내를 따릅니다.

    요청을 검토하고 처리하는 데 며칠이 걸릴 수 있습니다.

프로젝트당 일일 최대 복사 작업 수 할당량 오류

BigQuery에서는 프로젝트에서 실행 중인 복사 작업 수가 일일 한도를 초과하면 이 오류가 반환됩니다. 일일 복사 작업 한도에 대한 자세한 내용은 복사 작업을 참조하세요.

오류 메시지

Your project exceeded quota for copies per project

진단

복사 작업이 발생하는 위치에 대한 추가 데이터를 수집하려면 다음을 시도해 보세요.

  • 복사 작업이 단일 또는 몇 개의 리전에 있는 경우 해당 리전에 대해 INFORMATION_SCHEMA.JOBS 테이블을 쿼리할 수 있습니다. 예를 들면 다음과 같습니다.
    SELECT
    creation_time, job_id, user_email, destination_table.project_id, destination_table.dataset_id, destination_table.table_id
    FROM `PROJECT_ID`.`REGION_NAME`.INFORMATION_SCHEMA.JOBS
    WHERE
    creation_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 2 DAY) AND CURRENT_TIMESTAMP()
    AND job_type = "COPY"
    order by creation_time DESC
    
    REGION_NAME 부분을 region- 프리픽스가 포함된 리전 이름으로 바꿔야 합니다. 예를 들면 region-us, region-asia-south1입니다. 원하는 시간 범위에 따라 시간 간격을 조정할 수도 있습니다.
  • 모든 리전의 모든 복사 작업을 보려면 Cloud Logging에서 다음 필터를 사용하면 됩니다.
    resource.type="bigquery_resource"
    protoPayload.methodName="jobservice.insert"
    protoPayload.serviceData.jobInsertRequest.resource.jobConfiguration.tableCopy:*
    

해결 방법

  • 빈번한 복사 작업의 목표가 데이터 스냅샷을 만들기 위함이라면 테이블 스냅샷을 대신 사용하는 것이 좋습니다. 테이블 스냅샷은 전체 테이블을 복사하는 것보다 저렴하고 빠릅니다.
  • 지원팀 또는 영업팀에 문의하여 할당량 증가를 요청할 수 있습니다. 요청을 검토하고 처리하는 데 며칠이 걸릴 수 있습니다. 요청에 우선순위, 사용 사례, 프로젝트 ID를 명시하는 것이 좋습니다.