Mensajes de error
En este documento se describen los mensajes de error que pueden aparecer al trabajar con BigQuery, como códigos de error de HTTP y pasos sugeridos para solucionar problemas.
Para obtener más información sobre los errores de consulta, consulta el artículo Solucionar errores de consulta.
Para obtener más información sobre los errores de inserción de transmisión, consulta el artículo Solucionar problemas de inserciones de transmisión.
Tabla de errores
Las respuestas de la API BigQuery incluyen un código de error HTTP y un objeto de error en el cuerpo de la respuesta. Un objeto de error suele ser uno de los siguientes:
- Un objeto
errors
, que contiene una matriz de objetosErrorProto
. - Un
errorResults
objeto, que contiene un soloErrorProto
objeto.
La columna Mensaje de error de la siguiente tabla se corresponde con la propiedad reason
de un objeto ErrorProto
.
La tabla no incluye todos los errores HTTP posibles ni otros errores de red. Por lo tanto, no supongas que un objeto de error está presente en todas las respuestas de error de BigQuery. Además, es posible que recibas errores u objetos de error diferentes si usas las bibliotecas de cliente de Cloud para la API de BigQuery. Para obtener más información, consulta las bibliotecas de cliente de la API de BigQuery.
Si recibes un código de respuesta HTTP que no aparece en la siguiente tabla, significa que hay un problema o un resultado esperado con la solicitud HTTP. Los códigos de respuesta del intervalo 5xx
indican que se ha producido un error del lado del servidor. Si recibes el código de respuesta 5xx
, vuelve a intentar la solicitud más tarde. En algunos casos, un servidor intermedio, como un proxy, puede devolver un código de respuesta 5xx
. Examina el cuerpo y los encabezados de la respuesta para obtener información sobre el error. Para ver una lista completa de códigos de respuesta HTTP, consulta Códigos de respuesta HTTP.
Si usas la herramienta de línea de comandos bq para comprobar el estado de un trabajo, el objeto de error no se devuelve de forma predeterminada. Para ver el objeto de error y la propiedad reason
correspondiente que se asigna a la siguiente tabla, usa la marca --format=prettyjson
. Por ejemplo, bq --format=prettyjson show -j
*<job id>*
. Para ver los registros detallados de la herramienta bq, usa
--apilog=stdout
. Para obtener más información sobre cómo solucionar problemas con la herramienta bq, consulta Depuración.
Mensaje de error | Código HTTP | Descripción | Solución de problemas |
---|---|---|---|
accessDenied | 403 |
Este error se devuelve cuando intentas acceder a un recurso, como un conjunto de datos, una tabla, una vista o un trabajo, al que no tienes acceso. Este error también se devuelve cuando intentas modificar un objeto de solo lectura. |
Ponte en contacto con el propietario del recurso y solicita acceso al recurso para el usuario identificado por el valor |
attributeError | 400 |
Este error se devuelve cuando hay un problema con el código de usuario en el que se llama a un atributo de objeto determinado, pero no existe. |
Asegúrate de que el objeto con el que estás trabajando tenga el atributo al que intentas acceder. Para obtener más información sobre este error, consulta AttributeError. |
backendError | 500, 503 o 504 |
Este error indica que el servicio no está disponible en este momento. Esto puede deberse a varios problemas transitorios, como los siguientes:
|
Los errores 5xx son problemas del lado del servicio y el cliente no puede corregirlos ni controlarlos. Desde el lado del cliente, para mitigar el impacto de los errores 5xx, debes volver a enviar las solicitudes mediante retardos exponenciales truncados. Para obtener más información sobre los tiempos de espera exponenciales, consulta el artículo Tiempo de espera exponencial. Sin embargo, hay dos casos especiales para solucionar este error: las llamadas
Si los reintentos no son eficaces y los problemas persisten, puedes calcular la tasa de solicitudes fallidas y ponerte en contacto con el equipo de Asistencia. |
badRequest | 400 |
El error |
Espera unos minutos y vuelve a intentarlo, o filtra el extracto para que solo se aplique a los datos más antiguos que estén fuera del búfer de streaming. Para comprobar si hay datos disponibles para las operaciones de DML de tablas, consulta la También puedes transmitir datos con la API Storage Write de BigQuery, que no tiene esta limitación. |
billingNotEnabled | 403 |
Este error se devuelve cuando la facturación no está habilitada en el proyecto. |
Habilita la facturación del proyecto en la Google Cloud consola. |
billingTierLimitExceeded | 400 |
Este error se devuelve cuando el valor de
|
Este error suele producirse al ejecutar combinaciones cruzadas ineficientes, ya sea de forma explícita o implícita, por ejemplo, debido a una condición de combinación inexacta. Estos tipos de consultas no son adecuados para los precios bajo demanda debido al alto consumo de recursos y, en general, es posible que no se escalen bien. Para resolver este error, puede optimizar la consulta o cambiar al modelo de precios basado en la capacidad (slots). Para obtener información sobre cómo optimizar las consultas, consulta Evitar antipatrones de SQL. |
bloqueado | 403 |
Este error se devuelve cuando BigQuery ha incluido temporalmente en una lista de denegación la operación que has intentado realizar, normalmente para evitar una interrupción del servicio. |
Ponte en contacto con el equipo de Asistencia para obtener más información. |
duplicar | 409 |
Este error se devuelve al intentar crear un trabajo, un conjunto de datos o una tabla que ya existen. El error también se devuelve cuando la propiedad |
Cambia el nombre del recurso que estás intentando crear o modifica el valor de |
internalError | 500 |
Este error se devuelve cuando se produce un error interno en BigQuery. |
Espera según los requisitos de retardo que se describen en el Acuerdo de Nivel de Servicio de BigQuery y, a continuación, vuelve a intentar la operación. Si el error persiste, ponte en contacto con el equipo de Asistencia o registra un error mediante el sistema de seguimiento de problemas de BigQuery. También puedes reducir la frecuencia de este error usando Reservas. |
no válido | 400 |
Este error se devuelve cuando hay algún tipo de entrada no válida que no sea una consulta no válida, como campos obligatorios que faltan o un esquema de tabla no válido.
Las consultas no válidas devuelven un error |
|
invalidQuery | 400 |
Este error se devuelve cuando intentas ejecutar una consulta no válida. |
Comprueba si hay errores de sintaxis en tu consulta. La referencia de consulta contiene descripciones y ejemplos de cómo crear consultas válidas. |
invalidUser | 400 |
Este error se devuelve cuando intentas programar una consulta con credenciales de usuario no válidas. |
Actualiza las credenciales de usuario, tal como se explica en Programar consultas. |
jobBackendError | 400 |
Este error se devuelve cuando el trabajo se ha creado correctamente, pero ha fallado debido a un error interno. Es posible que veas este error en |
Vuelve a intentar ejecutar el trabajo con un nuevo |
jobInternalError | 400 |
Este error se devuelve cuando el trabajo se ha creado correctamente, pero ha fallado debido a un error interno. Es posible que veas este error en |
Vuelve a intentar ejecutar el trabajo con un nuevo |
jobRateLimitExceeded | 400 |
Este error se devuelve cuando el trabajo se ha creado correctamente, pero ha fallado con un error rateLimitExceeded. Es posible que veas este error en |
Usa un tiempo de espera exponencial para reducir la frecuencia de las solicitudes y, a continuación, vuelve a intentar la tarea con un nuevo |
notFound | 404 |
Este error se devuelve cuando haces referencia a un recurso (un conjunto de datos, una tabla o una tarea) que no existe o cuando la ubicación de la solicitud no coincide con la del recurso (por ejemplo, la ubicación en la que se está ejecutando una tarea). Esto también puede ocurrir al usar decoradores de tablas para hacer referencia a tablas eliminadas que se hayan transmitido recientemente. |
Corrija los nombres de los recursos, especifique correctamente la ubicación o espere al menos 6 horas después de la transmisión antes de consultar una tabla eliminada. |
notImplemented | 501 |
Este error de trabajo se devuelve cuando intentas acceder a una función que no se ha implementado. |
Ponte en contacto con el equipo de Asistencia para obtener más información. |
proxyAuthenticationRequired | 407 |
Este error se devuelve entre el entorno del cliente y el servidor proxy cuando la solicitud no tiene credenciales de autenticación válidas para el servidor proxy. Para obtener más información, consulta el artículo 407 Proxy Authentication Required. |
La solución de problemas es específica de tu entorno. Si recibes este error mientras trabajas en Java, asegúrate de haber definido las propiedades |
quotaExceeded | 403 |
Este error se devuelve cuando tu proyecto supera una cuota de BigQuery o una cuota personalizada, o cuando no has configurado la facturación y has superado el nivel gratuito de consultas. |
Consulta la propiedad |
rateLimitExceeded | 403 |
Este error se devuelve si tu proyecto supera un límite de frecuencia a corto plazo al enviar demasiadas solicitudes demasiado rápido. Por ejemplo, consulta los límites de frecuencia de los trabajos de consulta y los límites de frecuencia de las solicitudes de la API. |
Reduce la frecuencia de las solicitudes. |
resourceInUse | 400 |
Este error se devuelve cuando intentas eliminar un conjunto de datos que contiene tablas o cuando intentas eliminar un trabajo que se está ejecutando. |
Vacía el conjunto de datos antes de intentar eliminarlo o espera a que se complete un trabajo antes de eliminarlo. |
resourcesExceeded | 400 |
Este error se devuelve cuando tu trabajo usa demasiados recursos. |
Este error se devuelve cuando tu trabajo usa demasiados recursos. Para obtener información sobre cómo solucionar problemas, consulta Solucionar errores de recursos superados. |
responseTooLarge | 403 |
Este error se devuelve cuando los resultados de la consulta superan el tamaño máximo de respuesta. Algunas consultas se ejecutan en varias fases y este error se devuelve cuando alguna de las fases devuelve un tamaño de respuesta demasiado grande, aunque el resultado final sea inferior al máximo. Este error se suele devolver cuando las consultas usan una cláusula
|
A veces, añadir una cláusula |
detenida | 200 |
Este código de estado se devuelve cuando se cancela un trabajo. |
|
tableUnavailable | 400 |
Algunas tablas de BigQuery se basan en datos gestionados por otros equipos de productos de Google. Este error indica que una de estas tablas no está disponible. |
Cuando veas este mensaje de error, puedes volver a enviar la solicitud (consulta las sugerencias para solucionar problemas de internalError) o ponerte en contacto con el equipo del producto de Google que te haya concedido acceso a sus datos. |
Tiempo de espera | 400 |
Se ha agotado el tiempo de espera del trabajo. |
Plantéate reducir la cantidad de trabajo que realiza tu operación para que pueda completarse dentro del límite establecido. Para obtener más información, consulta Solucionar errores de cuota y límite. |
Respuesta de error de ejemplo
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"
}
}
Calcula la tasa de solicitudes fallidas y el tiempo de actividad
La mayoría de los errores 500 y 503 se pueden resolver volviendo a intentar la operación con un tiempo de espera exponencial. Si los errores 500 y 503 persisten, puedes calcular la tasa general de solicitudes fallidas y el tiempo de actividad correspondiente para compararlos con el Acuerdo de Nivel de Servicio (ANS) de BigQuery y determinar si el servicio funciona correctamente.
Para calcular la tasa general de solicitudes fallidas durante los últimos 30 días, divida el número de solicitudes fallidas de una llamada o un método de la API específicos de los últimos 30 días entre el número total de solicitudes de esa llamada o método de la API de los últimos 30 días. Multiplica este valor por 100 para obtener el porcentaje medio de solicitudes fallidas en un periodo de 30 días.
Por ejemplo, puedes consultar datos de Cloud Logging para obtener el número total de solicitudes jobs.insert
y el número de solicitudes jobs.insert
fallidas, y realizar el cálculo. También puede obtener los valores de la tasa de errores en el panel de control de APIs o mediante el Explorador de métricas de Cloud Monitoring. Estas opciones no incluirán datos sobre problemas de redes o de enrutamiento que se hayan producido entre el cliente y BigQuery, por lo que también recomendamos usar un sistema de registro e informes del lado del cliente para calcular las tasas de errores con mayor precisión.
Primero, resta el porcentaje general de solicitudes fallidas a 100 %. Si este valor es mayor o igual que el valor descrito en el SLA de BigQuery, el tiempo de actividad también cumple el SLA de BigQuery. Sin embargo, si este valor es inferior al valor descrito en el SLA, calcula el tiempo de actividad manualmente.
Para calcular el tiempo de actividad, debes saber el número de minutos que se consideran tiempo de inactividad del servicio. El tiempo de inactividad del servicio se refiere a un periodo de un minuto con una tasa de errores superior al 10 %, calculada de acuerdo con las definiciones del SLA. Para calcular el tiempo de actividad, toma el total de minutos de los últimos 30 días y resta el total de minutos que el servicio ha estado inactivo. Divide el tiempo restante entre el número total de minutos de los últimos 30 días y multiplica este valor por 100 para obtener el porcentaje de tiempo de actividad de los últimos 30 días. Para obtener más información sobre las definiciones y los cálculos relacionados con el ANS , consulta el acuerdo de nivel de servicio de BigQuery.
Si el porcentaje de tiempo de actividad mensual es igual o superior al valor descrito en el SLA de BigQuery, es muy probable que el error se haya debido a un problema transitorio, por lo que puedes seguir intentándolo con retroceso exponencial.
Si el tiempo de actividad es inferior al valor que se indica en el SLA, ponte en contacto con el equipo de Asistencia para obtener ayuda y comparte los cálculos del tiempo de actividad y de la tasa de errores general observados.
Errores de autenticación
Los errores que genera el sistema de generación de tokens de OAuth devuelven el siguiente objeto JSON, tal como se define en la especificación de OAuth2.
{"error" : "_description_string_"}
El error va acompañado de un error 400
Bad Request de HTTP o de un error 401
Unauthorized de HTTP. _description_string_
es uno de los códigos de error definidos en la especificación de OAuth2. Por ejemplo:
{"error":"invalid_client"}
Revisar errores
Puede usar el explorador de registros para ver los errores de autenticación de tareas, usuarios u otros ámbitos específicos. A continuación, se muestran ejemplos de filtros del explorador de registros que puedes usar para revisar los errores de autenticación:
Busca los trabajos fallidos con problemas de permisos en los registros de auditoría de denegación de acceso por infracción de las políticas:
resource.type="bigquery_resource" protoPayload.status.message=~"Access Denied" logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access"
Sustituye
PROJECT_ID
por el ID del proyecto que contiene el recurso.Busca un usuario o una cuenta de servicio específicos que se hayan usado para la autenticación:
resource.type="bigquery_resource" protoPayload.authenticationInfo.principalEmail="EMAIL"
Sustituye
EMAIL
por la dirección de correo del usuario o de la cuenta de servicio.Busca cambios en las políticas de Gestión de Identidades y Accesos en los registros de auditoría de la actividad administrativa:
protoPayload.methodName=~"SetIamPolicy" logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity"
Busca los cambios realizados en un conjunto de datos de BigQuery específico en los registros de auditoría de acceso a datos:
resource.type="bigquery_resource" protoPayload.resourceName="projects/PROJECT_ID/datasets/DATASET_ID" logName=projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access
Sustituye
DATASET_ID
por el ID del conjunto de datos que contiene el recurso.
Mensajes de error de conectividad
En la siguiente tabla se indican los mensajes de error que pueden aparecer debido a problemas de conectividad intermitentes al usar las bibliotecas de cliente o al llamar a la API de BigQuery desde tu código:
Mensaje de error | Biblioteca de cliente o API | Solución de problemas |
---|---|---|
com.google.cloud.bigquery.BigQueryException: se ha agotado el tiempo de espera de lectura | Java | Define un valor de tiempo de espera mayor. |
Se ha cerrado la conexión: javax.net.ssl.SSLException: java.net.SocketException: Connection reset at com.google.cloud.bigquery.spi.v2.HttpBigQueryRpc.translate(HttpBigQueryRpc.java:115) | Java | Implementa un mecanismo de reintento y define un valor de tiempo de espera mayor. |
javax.net.ssl.SSLHandshakeException: el host remoto ha finalizado la negociación | Java | Implementa un mecanismo de reintento y define un valor de tiempo de espera mayor. |
BrokenPipeError: [Errno 32] Broken pipe | Python | Implementa un mecanismo de reintento. Para obtener más información sobre este error, consulta BrokenPipeError. |
Se ha abortado la conexión. RemoteDisconnected('Remote end closed connection without response' | Python | Define un valor de tiempo de espera mayor. |
SSLEOFError (se ha producido un EOF en infracción del protocolo) | Python | Este error se devuelve en lugar de un error HTTP 413 (ENTITY_TOO_LARGE ). Reduce el tamaño de la solicitud. |
TaskCanceledException: se ha cancelado una tarea | Biblioteca .NET | Aumenta el valor de tiempo de espera en el lado del cliente. |
google.api_core.exceptions.PreconditionFailed: 412 PATCH | Python | Este error se devuelve al intentar actualizar un recurso de tabla mediante una solicitud HTTP. Comprueba que el ETag del encabezado HTTP no esté obsoleto. En el caso de las operaciones a nivel de tabla o de conjunto de datos, asegúrate de que el recurso no haya cambiado desde la última vez que se instanció y vuelve a crear el objeto si es necesario. |
No se ha podido establecer una nueva conexión: [Errno 110] Connection timed out | Bibliotecas de cliente | Este error se devuelve cuando esta solicitud ha llegado al final del archivo (EOF) al transmitir o leer datos de BigQuery. Implementa un mecanismo de reintento y asigna un valor de tiempo de espera mayor. |
socks.ProxyConnectionError: Error al conectar con el proxy HTTP
|
Bibliotecas de cliente | Soluciona problemas con el estado y la configuración del proxy. Implementa un mecanismo de reintento y asigna un valor de tiempo de espera mayor. |
Se ha recibido un EOF inesperado o 0 bytes de la secuencia de transporte | Bibliotecas de cliente | Implementa un mecanismo de reintento y asigna un valor de tiempo de espera mayor. |
Google Cloud mensajes de error de la consola
En la siguiente tabla se enumeran los mensajes de error que pueden aparecer mientras trabajas en la consolaGoogle Cloud .
Mensaje de error | Descripción | Solución de problemas |
---|---|---|
Respuesta de error desconocida del servidor. | Este error se muestra cuando la Google Cloud consola recibe un error desconocido del servidor. Por ejemplo, cuando haces clic en un conjunto de datos u otro tipo de enlace y no se puede mostrar la página. | Cambia al modo Incógnito o de navegación privada de tu navegador y repite la acción que ha provocado el error. Si no se produce ningún error en el modo Incógnito, puede deberse a una extensión del navegador, como un bloqueador de anuncios. Inhabilita las extensiones del navegador cuando no estés en modo Incógnito y comprueba si se resuelve el problema. |