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:

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 principalEmail en el registro de auditoría del error.

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:

  • Aumento repentino de la demanda de servicios: los picos repentinos de demanda, como las horas de mayor uso, pueden provocar la reducción de la carga para proteger la calidad del servicio para todos los usuarios de BigQuery. Para evitar que el sistema se sature, BigQuery puede devolver errores 500 o 503 en una pequeña parte de las solicitudes.
  • Problemas de red: la naturaleza distribuida de BigQuery implica que los datos se transfieren a menudo entre diferentes componentes o máquinas del sistema. Varios problemas intermitentes de conectividad de red pueden provocar que BigQuery devuelva un error 5xx, como fallos de handshake SSL u otros problemas de infraestructura de red entre el usuario yGoogle Cloud.
  • Agotamiento de recursos: BigQuery tiene varios límites de recursos internos para proteger el rendimiento general del servicio frente a un solo usuario o un solo trabajo que consuma demasiados recursos. BigQuery implementa la reducción de carga para hacer frente al agotamiento de recursos.
  • Errores del backend: en raras ocasiones, un problema interno en uno de los componentes de BigQuery puede provocar que se devuelva un error 500 o 503 al cliente.

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 jobs.get y las llamadas jobs.insert.

jobs.get llamadas

  • Si has recibido un error 503 al sondear jobs.get, espera unos segundos y vuelve a sondear.
  • Si el trabajo se completa, pero incluye un objeto de error que contiene backendError, significa que ha fallado. Puedes volver a intentar el trabajo de forma segura sin preocuparte por la coherencia de los datos.

jobs.insert llamadas
Si recibes este error al hacer una llamada de jobs.insert, no está claro si el trabajo se ha completado correctamente. En esta situación, tendrás que volver a intentar el trabajo.

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.
Además, si observas que una solicitud específica a BigQuery falla de forma persistente con un error 5xx, incluso cuando se reintenta con una retirada exponencial en varios intentos de reinicio del flujo de trabajo, debes derivar el problema al equipo de Asistencia para que lo solucione desde el lado de BigQuery, independientemente de la tasa de errores calculada en general. Asegúrate de comunicar claramente el impacto en la empresa para que el problema se pueda clasificar correctamente.

badRequest 400

El error 'UPDATE or DELETE statement over table project.dataset.table would affect rows in the streaming buffer, which is not supported' puede producirse cuando algunas filas transmitidas recientemente en una tabla no están disponibles para operaciones de DML (DELETE, UPDATE, MERGE), normalmente durante unos minutos, pero, en casos excepcionales, hasta 90 minutos. Para obtener más información, consulta Disponibilidad de datos de streaming y Limitaciones de DML.

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 tables.get respuesta de la sección streamingBuffer. Si no aparece la sección streamingBuffer, los datos de la tabla estarán disponibles para las operaciones de DML. También puedes usar el campo streamingBuffer.oldestEntryTime para identificar la antigüedad de los registros en el búfer de streaming.

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 statistics.query.billingTier de un trabajo bajo demanda supera 100. Esto ocurre cuando las consultas bajo demanda usan demasiada CPU en relación con la cantidad de datos analizados. Para obtener instrucciones sobre cómo inspeccionar los detalles de un trabajo, consulta el artículo Gestionar trabajos.

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 writeDisposition de una tarea se define como WRITE_EMPTY y la tabla de destino a la que accede la tarea ya existe.

Cambia el nombre del recurso que estás intentando crear o modifica el valor de writeDisposition en el trabajo. Para obtener más información, consulta cómo solucionar el error El trabajo ya existe.

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.

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 jobs.query o en jobs.getQueryResults.

Vuelve a intentar ejecutar el trabajo con un nuevo jobId. Si el error persiste, ponte en contacto con el equipo de Asistencia.

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 jobs.query o en jobs.getQueryResults.

Vuelve a intentar ejecutar el trabajo con un nuevo jobId. Si el error persiste, ponte en contacto con el equipo de Asistencia.

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 jobs.query o jobs.getQueryResults.

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 jobId.

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 jdk.http.auth.tunneling.disabledSchemes= y jdk.http.auth.proxying.disabledSchemes= sin ningún valor después del signo igual.

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 message del objeto de error para obtener más información sobre la cuota que se ha superado. Para restablecer o aumentar una cuota de BigQuery, ponte en contacto con el equipo de Asistencia. Para modificar una cuota personalizada, envía una solicitud desde la página Cuotas. Si recibes este error al usar el entorno aislado de BigQuery, puedes actualizar desde el entorno aislado.
Para obtener más información, consulta el artículo Solucionar errores de cuota de BigQuery.

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.
Si crees que tu proyecto no ha superado uno de estos límites, ponte en contacto con el equipo de Asistencia.
Para obtener más información, consulta el artículo Solucionar errores de cuota de BigQuery.

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 ORDER BY.

A veces, añadir una cláusula LIMIT o quitar la cláusula ORDER BY puede ayudar. Si quiere asegurarse de que se puedan devolver resultados de gran tamaño, puede definir la propiedad allowLargeResults en true y especificar una tabla de destino. Para obtener más información, consulta el artículo Escribir resultados de consultas grandes.

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 :8080: [Errno 110] Connection timed out 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.