Mensagens de erro

Neste documento, descrevemos as mensagens de erro que podem ser encontradas ao trabalhar com o BigQuery, incluindo códigos de erro HTTP e etapas de solução de problemas sugeridas.

Saiba mais sobre erros de consulta em Corrigir erros de consulta.

Para saber mais sobre erros de inserção por streaming, consulte Resolver problemas de inserções por streaming.

Tabela de erros

As respostas da API BigQuery incluem um código do erro HTTP e um objeto de erros no corpo da resposta. Um objeto de erro geralmente é um dos seguintes:

A coluna Mensagem de erro na tabela a seguir é mapeada para a propriedade reason em um objeto ErrorProto.

Essa tabela não inclui todos os erros HTTP possíveis ou outros erros de rede. Portanto, não presuma que um objeto de erro esteja presente em todas as respostas de erro do BigQuery. Além disso, você poderá receber erros ou objetos de erro diferentes se usar as bibliotecas de cliente do Cloud para a API BigQuery. Para mais informações, consulte Bibliotecas de cliente da API BigQuery.

Se você receber um código de resposta HTTP que não aparece na tabela abaixo, ele indicará um problema ou um resultado esperado com a solicitação HTTP. Os códigos de resposta no intervalo 5xx indicam um erro do lado do servidor. Se você receber um código de resposta 5xx, tente fazer a solicitação novamente mais tarde. Em alguns casos, um código de resposta 5xx pode ser retornado por um servidor intermediário, como um proxy. Examine o corpo da resposta e os cabeçalhos das respostas para saber mais sobre o erro. Para conferir a lista completa de códigos de resposta HTTP, consulte códigos de resposta HTTP.

Se você usar a ferramenta de linha de comando bq para verificar o status do job, o objeto de erro não será retornado por padrão. Para visualizar o objeto de erro e a propriedade reason correspondente que é mapeada para a tabela a seguir, use a sinalização --format=prettyjson. Por exemplo, bq --format=prettyjson show -j *<job id>*. Para visualizar o registro detalhado da ferramenta bq, use --apilog=stdout. Para saber mais sobre como solucionar problemas da ferramenta bq, consulte Depuração.

Mensagem de erro Código HTTP Descrição Solução de problemas
accessDenied 403

Esse erro é retornado quando você tenta acessar um recurso, como um conjunto de dados, tabela, visualização ou job, a que não tem acesso. Ele também é retornado quando você tenta modificar um objeto somente leitura.

Entre em contato com o proprietário do recurso e solicite acesso a ele para o usuário identificado pelo valor principalEmail no registro de auditoria do erro.

attributeError 400

Esse erro é retornado quando há um problema com o código do usuário em que um determinado atributo de objeto é chamado, mas não existe.

Verifique se o objeto com que você está trabalhando tem o atributo que você está tentando acessar. Para mais informações sobre esse erro, consulte AttributeError.

backendError 500, 502, 503 ou 504

Esse erro indica que o serviço não está disponível no momento. Isso pode acontecer devido a vários problemas temporários, incluindo:

  • Aumento repentino na demanda de serviço: picos repentinos na demanda, como horários de pico de uso, podem resultar em redução de carga para proteger a qualidade do serviço para todos os usuários do BigQuery. Para evitar que o sistema fique sobrecarregado, o BigQuery pode retornar erros 500 ou 503 para uma pequena parte das solicitações.
  • Problemas de rede: a natureza distribuída do BigQuery significa que os dados são transferidos entre diferentes componentes ou máquinas no sistema. Vários problemas intermitentes de conectividade de rede podem fazer com que o BigQuery retorne um erro 5xx, incluindo falhas de handshake SSL ou outros problemas de infraestrutura de rede entre o usuário eGoogle Cloud.
  • Exaustão de recursos: o BigQuery tem vários limites internos de recursos para proteger o desempenho geral do serviço contra um único usuário ou job que consuma muitos recursos. O BigQuery implementa o corte de carga para lidar com o esgotamento de recursos.
  • Erros de back-end: em casos raros, um problema interno em um dos componentes do BigQuery pode resultar em um erro 500 ou 503 retornado ao cliente.

Os erros 5xx são problemas do lado do serviço, e o cliente não tem como corrigir ou controlar esses erros. Do lado do cliente, para reduzir o impacto dos erros 5xx, repita as solicitações usando esperas exponenciais truncadas. Para mais informações sobre esperas exponenciais, consulte Espera exponencial. No entanto, há dois casos especiais para resolver esse erro: chamadas jobs.get e jobs.insert.

jobs.get chamadas

  • Se você recebeu um erro 503 ao pesquisar jobs.get, aguarde alguns segundos e tente de novo.
  • Se o job for concluído, mas incluir um objeto de erro que contenha backendError, ele terá falhado. É possível repetir o job com segurança sem se preocupar com a consistência de dados.

Chamadas jobs.insert
Se você receber esse erro ao fazer uma chamada jobs.insert, não será possível saber se o job foi concluído. Nesse caso, você precisa tentar de novo.

Se as novas tentativas não forem eficazes e os problemas persistirem, calcule a taxa de solicitações com falha e entre em contato com o suporte.
Além disso, se você observar que uma solicitação específica ao BigQuery falha persistentemente com um erro 5xx, mesmo quando repetida usando espera exponencial em várias tentativas de reinicialização do fluxo de trabalho, encaminhe o problema para o suporte para resolver o problema do lado do BigQuery, independente da taxa de erro geral calculada. Comunique claramente o impacto nos negócios para que o problema seja avaliado corretamente.

badRequest 400

O erro 'UPDATE or DELETE statement over table project.dataset.table would affect rows in the streaming buffer, which is not supported' pode ocorrer quando algumas linhas transmitidas recentemente em uma tabela podem não estar disponíveis para operações DML (DELETE, UPDATE,MERGE), normalmente por alguns minutos, mas em casos raros, até 90 minutos. Para mais informações, consulte Disponibilidade de dados de streaming e Limitações do DML.

Aguarde alguns minutos e tente de novo ou filtre a instrução para operar apenas em dados mais antigos que estão fora do buffer de streaming. Para ver se os dados estão disponíveis para operações DML de tabela, verifique a resposta tables.get para a seção streamingBuffer. Se a seção streamingBuffer estiver ausente, os dados da tabela estarão disponíveis para operações DML. Também é possível usar o campo streamingBuffer.oldestEntryTime para identificar a idade dos registros no buffer de streaming.

Como alternativa, considere fazer streaming de dados com a API BigQuery Storage Write, que não tem essa limitação.

billingNotEnabled 403

Este erro é retornado quando o faturamento não está ativado no projeto.

Ative o faturamento para o projeto no console doGoogle Cloud .

billingTierLimitExceeded 400

Esse erro é retornado quando o valor de statistics.query.billingTier de um job sob demanda excede 100. Isso ocorre quando as consultas sob demanda usam muita CPU em relação à quantidade de dados verificados. Para instruções sobre como inspecionar detalhes de jobs, consulte Como gerenciar jobs.

Na maioria das vezes, esse erro resulta da execução de correlações ineficientes, explícita ou implicitamente, por exemplo, devido a uma condição de junção inexata. Esses tipos de consultas não são adequados para preços sob demanda devido ao alto consumo de recursos e, em geral, podem não ser bem dimensionados. É possível otimizar a consulta ou mudar para usar o modelo de preços com base na capacidade (slots) para resolver esse erro. Para mais informações sobre como otimizar consultas, acesse Como evitar antipadrões do SQL.

blocked 403

Esse erro é retornado quando o BigQuery coloca temporariamente a operação que você tentou executar na lista de bloqueio, geralmente para evitar interrupção do serviço.

Entre em contato com o suporte para mais informações.

duplicar 409

Esse erro é retornado ao tentar criar um job, um conjunto de dados ou uma tabela que já existe. O erro também é retornado quando a propriedade writeDisposition de um job é definida como WRITE_EMPTY e a tabela de destino acessada pelo job já existe.

Renomeie o recurso que você está tentando criar ou altere o valor writeDisposition no job. Para mais informações, consulte como resolver o erro O job já existe.

internalError 500

Esse erro é retornado quando ocorre um erro interno no BigQuery.

Aguarde de acordo com os requisitos de retirada descritos no Contrato de nível de serviço do BigQuery, depois tente a operação novamente. Se o erro persistir, entre em contato com o suporte ou registre um bug usando o rastreador de problemas do BigQuery. Também é possível reduzir a frequência desse erro usando Reservas.

inválido 400

Esse erro é retornado quando há algum tipo de entrada inválida que não seja uma consulta, como campos obrigatórios ausentes ou esquema de tabela inválido. Consultas inválidas retornam um erro invalidQuery.

invalidQuery 400

Este erro é retornado quando você tenta executar uma consulta inválida.

Verifique se há erros de sintaxe na sua consulta. A referência de consulta contém descrições e exemplos de como criar consultas válidas.

invalidUser 400

Esse erro é retornado quando você tenta programar uma consulta com credenciais de usuário inválidas.

Atualize as credenciais do usuário, conforme explicado em Como programar consultas.

jobBackendError 400

Esse erro é retornado quando o job é criado, mas falha com um erro interno. É possível ver esse erro em jobs.query ou jobs.getQueryResults.

Tente novamente com um novo jobId. Se o erro persistir, entre em contato com o suporte.

jobInternalError 400

Esse erro é retornado quando o job é criado, mas falha com um erro interno. É possível ver esse erro em jobs.query ou jobs.getQueryResults.

Tente novamente com um novo jobId. Se o erro persistir, entre em contato com o suporte.

jobRateLimitExceeded 400

Esse erro é retornado quando o job é criado, mas falha com um erro rateLimitExceeded. É possível ver esse erro em jobs.query ou jobs.getQueryResults.

Use a espera exponencial para reduzir a taxa de solicitações e tente novamente o job com um novo jobId.

notFound 404

Esse erro é retornado quando você se refere a um recurso (um conjunto de dados, uma tabela ou um job) que não existe ou quando o local na solicitação não corresponde ao local do recurso (por exemplo, o local em que um job está sendo executado). Isso também pode ocorrer ao usar decoradores de tabela para se referir a tabelas excluídas que receberam streaming recentemente.

Corrija os nomes dos recursos, especifique corretamente o local ou aguarde pelo menos 6 horas após o streaming antes de consultar uma tabela excluída.

notImplemented 501

Esse erro de job é retornado quando você tenta acessar um recurso que não foi implementado.