BigQuery 구독 문제 해결

이 페이지에서는 BigQuery 구독에 대한 일반적인 문제 해결 팁을 제공합니다.

BigQuery 구독 상태 확인

구독 상태를 확인하려면 다음 단계를 수행하세요.

  1. Google Cloud Console에서 Pub/Sub 구독 페이지로 이동합니다.

    구독 페이지로 이동

  2. BigQuery 구독의 상태 아이콘을 확인합니다.

    아이콘이 녹색 체크표시이면 구독이 정상입니다.

    아이콘이 빨간색 느낌표면 구독이 오류 상태입니다.

  3. BigQuery 구독을 클릭합니다.

    구독 세부정보 페이지가 열립니다.

  4. 구독 상태에서 오류 메시지를 확인합니다.

  5. 오류 메시지에 따라 문제 해결을 위해 이 페이지의 관련 섹션으로 이동합니다.

문제가 해결되면 구독이 결국 정상 상태로 돌아갑니다.

구독을 만들거나 업데이트할 수 없음

다음은 BigQuery 구독을 만들거나 업데이트할 때 발생하는 일반적인 문제에 대한 설명입니다.

테이블을 찾을 수 없음 오류

구독 만들기 또는 업데이트 워크플로에 지정한 테이블이 존재하지 않으면 워크플로가 테이블을 찾을 수 없음 오류를 반환합니다. Google Cloud 콘솔에서 다음과 비슷한 메시지가 표시됩니다.

The BigQuery table or dataset specified cannot be found.

문제를 해결하려면 테이블을 만들고 BigQuery 구독에 사용하기 전 해당 상태를 확인할 수 있는지 확인합니다.

스키마 불일치 오류

테이블 및 주제의 스키마가 호환되지 않으면 구독 만들기 또는 업데이트 워크플로가 스키마 불일치 오류를 반환합니다. Google Cloud 콘솔에서 다음과 비슷한 메시지가 표시됩니다.

Incompatible schema type for field project_ids: expected INT64, got STRING

지정된 오류 메시지는 project_ids라는 필드의 스키마 불일치에 대한 것입니다. 발생한 스키마 불일치 유형에 따라 오류 메시지가 다르게 표시될 수 있습니다.

이 문제를 해결하려면 스키마 매핑이 호환되는지 확인합니다.

서비스 계정 오류

올바른 권한을 사용해서 Pub/Sub 서비스 계정을 구성하지 않은 경우 구독 만들기 또는 업데이트 워크플로로 오류가 반환됩니다. Google Cloud 콘솔에서 다음과 비슷한 메시지가 표시됩니다.

Service account service-1234234234@gcp-sa-pubsub.iam.gserviceaccount.com
is missing permissions required to write to the BigQuery table:
bigquery.tables.get, bigquery.tables.updateData.

문제를 해결하려면 서비스 계정에 올바른 권한이 있는지 확인합니다.

구독 상태가 빨간색 느낌표로 표시됨

구독을 만든 후 테이블을 수정하면 Pub/Sub의 테이블 메시지 작성 방법에 영향을 줄 수 있습니다. 변경으로 인해 문제가 발생하면 구독 상태 필드가 오류 상태로 설정됩니다.

구독 세부정보 페이지에서 Subscription state 필드 상태를 확인합니다. Subscription state 필드는 다음 중 하나일 수 있는 보다 구체적인 오류를 제공합니다.

  • 테이블을 찾을 수 없음: 테이블이 삭제되었습니다. 테이블을 만들고 테이블 상태를 확인합니다. 테이블 정보 가져오기를 참조하세요.

  • 테이블 권한 거부됨: Pub/Sub 서비스 계정에 더 이상 테이블에 쓰기 권한이 없습니다. 서비스 계정에 올바른 권한이 있는지 확인합니다.

  • 테이블 스키마 불일치: 테이블 스키마가 BigQuery 구독 설정과 더 이상 호환되지 않습니다. 스키마 매핑이 호환되는지 확인합니다.

Pub/Sub 구독이 오류 상태이면 메시지가 BigQuery 테이블에 작성되지 않고 구독 백로그에 유지됩니다. 메시지는 구성된 경우 연결된 데드 레터 주제로 전송되지 않습니다. 확인되지 않은 메시지는 message_retention_duration에 설정된 기간(기본적으로 7일) 동안 보관됩니다.

백로그 증가

구독에 메시지 백로그가 누적되거나 구독의 데드 레터 주제로 이동하는 메시지가 표시되는 경우 다음과 같은 잠재적 원인을 검토하세요.

INVALID_ARGUMENT 오류 메시지

제공된 메시지가 Pub/Sub에서 유효하지만 BigQuery 대상 테이블 스키마에서 유효하지 않은 것으로 고려되는 형식일 때 이 오류가 발생합니다. 즉, 메시지의 하나 이상의 필드에 BigQuery 테이블 스키마에서 허용되지 않는 값이 포함되어 있습니다. 스키마 호환성을 검토하여 데이터 유형 및 형식이 올바른지 확인합니다. 가장 일반적인 오류는 다음과 같습니다.

  • 빈 문자열("")이 유효한 JSON이 아닙니다. null 허용 JSON BigQuery 테이블 열에 데이터를 전송할 때 누락된 값을 나타내려면 비어 있는 JSON 객체 ({}), null, 또는 비어 있는 JSON 문자열 ("\"\"")을 제공합니다. 빈 문자열을 전송하면 오류가 발생합니다.

  • 메시지 필드 값이 BigQuery 필드의 최대 길이를 초과하면 크기 제한으로 인해 메시지가 실패합니다.

INVALID_ARGUMENT 오류를 문제 해결하려면 원하는 구독에 데드 레터 주제를 추가합니다. 데드 레터 주제는 실패 이유를 설명하는 CloudPubSubDeadLetterSourceDeliveryErrorMessage라는 속성과 함께 BigQuery에 기록할 수 없는 메시지를 캡처합니다.

이러한 전송 실패는 측정항목 탐색기에도 표시될 수 있습니다. pubsub.googleapis.com/subscription/push_request_count 측정항목을 선택하고 response_code=invalid_argument로 필터링합니다.

RESOURCE_EXHAUSTED 오류 메시지

메시지가 BigQuery에 느리게 기록되는 경우 프로젝트의 Pub/Sub push 할당량 또는 BigQuery 스토리지 쓰기 처리량 할당량을 늘려야 할 수 있습니다. 할당량 제한이 발생했는지 확인하려면 push 요청 측정항목(subscription/push_request_count)에 resource_exhausted 오류가 있는지 확인합니다.

할당량 문제를 진단하는 또 다른 방법은 프로젝트 할당량을 확인하는 것입니다. Pub/Sub 리소스 또는 BigQuery 인스턴스가 포함된 프로젝트 내에서 IAM 및 관리자 > 할당량으로 이동합니다. pubsub.googleapis.com/regionalpushsubscriber 또는 bigquerystorage.googleapis.com/write/append_bytes의 관련 할당량을 검색합니다. 할당량을 하나라도 늘려야 하는 경우 높은 할당량을 요청할 수 있습니다.

파티션 ID 열에서 __UNPARTITIONED__가 표시된 시간별 파티션을 나눈 테이블

BigQuery 대상 테이블에서 시간별로 파티션을 나누면 행이 먼저 INFORMATION_SCHEMA.PARTITIONS 내에서 __UNPARTITIONED__로 라벨이 지정된 특수 파티션에 저장됩니다. 이는 수집 시간으로 파티션 나누기를 사용하는 테이블의 예상 동작입니다.

BigQuery는 스트리밍 버퍼를 사용해서 쓰기 프로세스를 최적화합니다. 데이터는 충분한 볼륨이 누적될 때까지 또는 최소 1시간 이상 경과될 때까지 __UNPARTITIONED__ 파티션에 유지될 수 있습니다. 이러한 조건이 충족된 다음에는 BigQuery가 데이터를 적합한 시간별 파티션으로 다시 분할합니다.

INFORMATION_SCHEMA.PARTITIONS 뷰를 사용하여 __UNPARTITIONED__ 파티션 내에서 데이터를 모니터링할 수 있습니다.

다음 단계

  • BigQuery 구독 문제가 계속되면 지원 받기를 참조하세요.