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:
- Um objeto
errors
, que contém uma matriz de objetosErrorProto
. - Um objeto
errorResults
, que contém um único objetoErrorProto
.
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 |
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, 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:
|
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 espera exponencial, consulte Espera exponencial. No entanto, há dois casos especiais para resolver esse erro: chamadas
Chamadas 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. |
badRequest | 400 |
O erro |
Para ver se os dados estão disponíveis para operações DML de tabela, verifique a
resposta
|
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 |
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. |
bloqueado | 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
|
Renomeie o recurso que você está tentando criar ou altere o valor |
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 | 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 |
Tente novamente com um novo |
jobInternalError | 400 |
Esse erro é retornado quando o job é criado, mas falha com
um erro interno. É possível ver esse erro em |
Tente novamente com um novo |
jobRateLimitExceeded | 400 |
Esse erro é retornado quando o job é criado, mas falha com um erro
rateLimitExceeded. É possível ver esse erro em |
Use a espera exponencial para reduzir a taxa de solicitação e tente novamente o job com um novo |
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. |
Entre em contato com o suporte para mais informações. |
proxyAuthenticationRequired | 407 |
Esse erro é retornado entre o ambiente do cliente e o servidor proxy quando a solicitação não tem credenciais de autenticação válidas para o servidor proxy. Para mais informações, consulte 407 Autenticação de proxy necessária. |
A solução de problemas é específica para seu ambiente. Se você receber esse
erro ao trabalhar em Java, verifique se definiu as propriedades
|
quotaExceeded | 403 |
Esse erro é retornado quando o projeto excede uma cota do BigQuery ou uma cota personalizada, ou até mesmo quando o faturamento não foi configurado e excede o nível gratuito para consultas. |
Consulte a propriedade |
rateLimitExceeded | 403 |
Esse erro é retornado quando o projeto excede um limite de taxa de curto prazo ao enviar várias solicitações muito rapidamente. Por exemplo, consulte os limites de taxa para jobs de consulta e os limites de taxa para solicitações de API. |
Reduza a taxa de solicitação. |
resourceInUse | 400 |
Esse erro é retornado quando você tenta excluir um conjunto de dados com tabelas ou um job que esteja em execução. |
Esvazie o conjunto de dados ou aguarde a conclusão do job antes de tentar excluí-lo. |
resourcesExceeded | 400 |
Este erro é retornado quando o job usa um número excessivo de recursos. |
Este erro é retornado quando o job usa um número excessivo de recursos. Para informações sobre solução de problemas, consulte Corrigir erros de recursos excedidos. |
responseTooLarge | 403 |
Esse erro é retornado quando os resultados da consulta são maiores do que o tamanho máximo da resposta. Algumas consultas são executadas em várias etapas, e esse erro é retornado quando qualquer etapa apresenta uma resposta muito grande, mesmo que o resultado final seja menor do que o máximo. Esse erro normalmente retorna quando consultas usam uma cláusula
|
Adicionar uma cláusula |
interrompida | 200 |
Este código de status é retornado quando um job é cancelado. |
|
tableUnavailable | 400 |
Algumas tabelas do BigQuery têm como base dados gerenciados por outras equipes de produto do Google. Esse erro indica que uma dessas tabelas está indisponível. |
Ao encontrar essa mensagem de erro, é possível repetir a solicitação (consulte as sugestões de solução de problemas em internalError) ou entrar em contato com a equipe de produto do Google que lhe concedeu acesso aos dados. |
timeout | 400 |
O tempo limite do job expirou. |
Reduza a quantidade de trabalho realizada pela sua operação para que ela seja concluída dentro do limite definido. Para mais informações, consulte Resolver erros de cota e limite. |
Resposta de erro de amostra
GET https://bigquery.googleapis.com/bigquery/v2/projects/12345/datasets/foo
Response:
[404]
{
"error": {
"errors": [
{
"domain": "global",
"reason": "notFound",
"message": "Not Found: Dataset myproject:foo"
}],
"code": 404,
"message": "Not Found: Dataset myproject:foo"
}
}
Calcular a taxa de solicitações com falha e o tempo de atividade
A maioria dos erros 500 e 503 pode ser resolvida repetindo a ação com espera exponencial. Se os erros 500 e 503 persistirem, calcule a taxa geral de solicitações com falha e o tempo de atividade correspondente para comparar com o Contrato de nível de serviço (SLA) do BigQuery e determinar se o serviço está funcionando como esperado.
Para calcular a taxa geral de solicitações com falha nos últimos 30 dias, divida o número de solicitações com falha de uma chamada ou método de API específico nos últimos 30 dias pelo número total de solicitações dessa chamada ou método de API nos últimos 30 dias. Multiplique esse valor por 100 para receber a porcentagem média de solicitações com falha em 30 dias.
Por exemplo, é possível consultar os dados do Cloud Logging para receber o número total de solicitações jobs.insert
e o número de solicitações jobs.insert
com falha e fazer o cálculo. Também é possível extrair os valores da taxa de erros do painel de APIs ou usando o Metrics Explorer no Cloud Monitoring. Essas opções não incluem dados sobre problemas de rede ou roteamento encontrados entre o cliente e o BigQuery. Por isso, também recomendamos usar um sistema de geração de relatórios e registros do lado do cliente para cálculos mais precisos da taxa de falha.
Primeiro, pegue 100% menos a taxa geral de solicitações com falha. Se esse valor for maior ou igual ao descrito no SLA do BigQuery, o tempo de atividade também atenderá ao SLA do BigQuery. No entanto, se esse valor for menor que o descrito no SLA, calcule o tempo de atividade manualmente.
Para calcular o tempo de atividade, você precisa saber o número de minutos considerados como tempo de inatividade do serviço. Inatividade do serviço significa um período de um minuto com uma taxa de erro superior a 10%, calculada de acordo com as definições do SLA. Para calcular o tempo de atividade, pegue o total de minutos dos últimos 30 dias e subtraia o total de minutos em que o serviço ficou inativo. Divida o tempo restante pelo total de minutos dos últimos 30 dias e multiplique esse valor por 100 para saber a porcentagem de tempo de atividade em 30 dias. Para mais informações sobre as definições e os cálculos relacionados ao SLA , consulte o Contrato de nível de serviço (SLA) do BigQuery.
Se a porcentagem mensal de tempo de atividade for maior ou igual ao valor descrito no SLA do BigQuery, o erro provavelmente foi causado por um problema temporário. Portanto, continue tentando usar o backoff exponencial.
Se o tempo de atividade for menor que o valor apresentado no SLA, entre em contato com o suporte para receber ajuda e compartilhe a taxa geral de erros observada e os cálculos de tempo de atividade.
Erros de autenticação
Os erros emitidos pelo sistema de geração de tokens OAuth retornam o seguinte objeto JSON, conforme definido pela especificação OAuth2.
{"error" : "_description_string_"}
O erro vem acompanhado de outro erro, seja "HTTP 400
Solicitação inválida" ou "HTTP 401
Não autorizado". _description_string_
é um dos códigos de erro definidos pela especificação OAuth2. Exemplo:
{"error":"invalid_client"}
Analisar erros
Use o Explorador de registros para conferir erros de autenticação de jobs, usuários ou outros escopos específicos. Confira abaixo exemplos de filtros do Explorador de registros que podem ser usados para analisar erros de autenticação:
Pesquise jobs com falhas e problemas de permissão nos registros de auditoria de política negada:
resource.type="bigquery_resource" protoPayload.status.message=~"Access Denied" logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access"
Substitua
PROJECT_ID
pelo ID do projeto que contém o recurso.Pesquise um usuário ou uma conta de serviço específicos usados para autenticação:
resource.type="bigquery_resource" protoPayload.authenticationInfo.principalEmail="EMAIL"
Substitua
EMAIL
pelo endereço de e-mail do usuário ou da conta de serviço.Pesquise mudanças na política do Identity and Access Management nos registros de auditoria de atividade do administrador:
protoPayload.methodName=~"SetIamPolicy" logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity"
Pesquise mudanças em um conjunto de dados específico do BigQuery nos registros de auditoria de acesso a dados:
resource.type="bigquery_resource" protoPayload.resourceName="projects/PROJECT_ID/datasets/DATASET_ID" logName=projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access
Substitua
DATASET_ID
pelo ID do conjunto de dados que contém o recurso.
Mensagens de erro de conectividade
A tabela a seguir lista mensagens de erro que podem ser exibidas devido a problemas de conectividade intermitente ao usar as bibliotecas de cliente ou chamar a API BigQuery pelo código:
Mensagem de erro | Biblioteca de cliente ou API | Solução de problemas |
---|---|---|
com.google.cloud.bigquery.BigQueryException: Read timed out | Java | Defina um valor de tempo limite maior. |
A conexão foi encerrada: javax.net.ssl.SSLException: java.net.SocketException: Connection reset at com.google.cloud.bigquery.spi.v2.HttpBigQueryRpc.translate(HttpBigQueryRpc.java:115) | Java | Implemente um mecanismo de repetição e defina um valor de tempo limite maior. |
javax.net.ssl.SSLHandshakeException: o host remoto encerrou o handshake | Java | Implemente um mecanismo de repetição e defina um valor de tempo limite maior. |
BrokenPipeError: [Errno 32] Broken pipe | Python | Implemente um mecanismo de repetição. Para mais informações sobre esse erro, consulte BrokenPipeError. |
Conexão cancelada. RemoteDisconnected('Remote end closed connection without response' | Python | Defina um valor de tempo limite maior. |
SSLEOFError (EOF ocorreu em violação do protocolo) | Python | Esse erro é retornado em vez de um erro HTTP 413 (ENTITY_TOO_LARGE ). Reduza o tamanho da solicitação. |
TaskCanceledException: uma tarefa foi cancelada. | Biblioteca .NET | Aumente o valor do tempo limite no lado do cliente. |
google.api_core.exceptions.PreconditionFailed: 412 PATCH | Python | Esse erro é retornado ao tentar atualizar um recurso de tabela usando uma solicitação HTTP. Verifique se a ETag no cabeçalho HTTP não está desatualizada. Para operações no nível da tabela ou do conjunto de dados, verifique se o recurso não mudou desde a última vez que foi instanciado e recrie o objeto, se necessário. |
Falha ao estabelecer uma nova conexão: [Errno 110] Connection timed out | Bibliotecas de cliente | Esse erro é retornado quando a solicitação atinge o fim do arquivo (EOF) ao transmitir ou ler dados do BigQuery. Implemente um mecanismo de repetição e defina um valor de tempo limite maior. |
socks.ProxyConnectionError: Error connecting to HTTP proxy
|
Bibliotecas de cliente | Resolva problemas de status e configurações de proxy. Implemente um mecanismo de repetição e defina um valor de tempo limite maior. |
Recebeu um EOF inesperado ou 0 bytes do stream de transporte | Bibliotecas de cliente | Implemente um mecanismo de repetição e defina um valor de tempo limite maior. |
Google Cloud mensagens de erro do console
A tabela a seguir lista mensagens de erro que podem aparecer enquanto você trabalha no console doGoogle Cloud .
Mensagem de erro | Descrição | Solução de problemas |
---|---|---|
Resposta de erro desconhecida do servidor. | Esse erro é exibido quando o console Google Cloud recebe um erro desconhecido do servidor. Por exemplo, quando você clica em um conjunto de dados ou outro tipo de link, e a página não pode ser exibida. | Alterne para o modo de navegação anônima ou privada do navegador e repita a ação que resultou no erro. Se nenhum erro resultar no modo de navegação anônima, ele pode ocorrer devido a uma extensão do navegador, como um bloqueador de anúncios. Desative as extensões do navegador enquanto não estiver no modo de navegação anônima e verifique se isso resolve o problema. |