Mensajes de error

Encontrarás dos tipos de errores cuando trabajes con BigQuery: códigos de error HTTP o errores de trabajo. Los errores de trabajo se representan en el objeto status cuando llamas a jobs.get.

Tabla de errores

En la siguiente tabla, se enumeran los posibles códigos de error que se muestran cuando se realiza una solicitud a la API de BigQuery. Las respuestas de la API incluyen un código de error HTTP y un objeto de errores. La columna "Código de error" se asigna a la propiedad reason en el objeto de error.

Si usas la herramienta de línea de comandos de bq para verificar el estado del trabajo, según la configuración predeterminada, no se muestra el objeto de error. Para ver el objeto 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>

Si recibes un código de respuesta HTTP que no aparece en la lista a continuación, el código de respuesta indica un problema o un resultado esperado con la solicitud HTTP. Por ejemplo, un error 502 indica que hay un problema con tu conexión de red. Para obtener una lista completa de los códigos de respuesta HTTP, consulta Códigos de respuesta HTTP.

Código de error Código HTTP Descripción Solución de problemas
accessDenied 403 Se muestra este error cuando intentas acceder a un recurso al que no tienes acceso, como un conjunto de datos, una tabla, una vista o un trabajo. También se muestra cuando intentas modificar un objeto de solo lectura. Comunícate con el propietario del recurso y pídele acceso al recurso.
backendError 500 o 503 Este error se muestra cuando hay una falla temporal del servidor, como un problema de conexión de red o una sobrecarga del servidor. En general, debes esperar unos segundos y volver a intentar realizar la operación. Sin embargo, existen dos casos especiales en la solución de este error: el de las llamadas jobs.get y el de las llamadas jobs.insert.

llamadas jobs.get

  • Si recibes un error 503 cuando sondeas jobs.get, espera unos segundos y sondea de nuevo.
  • Si el trabajo se completa, pero incluye un objeto de error que contiene backendError, el trabajo falló. Puedes volver a intentarlo de forma segura sin preocuparte por la coherencia de los datos.

Llamadas a jobs.insert

Si recibes este error durante una llamada a jobs.insert, no queda claro si el trabajo se realizó de forma correcta. En este caso, deberás volver a intentarlo.

billingNotEnabled 403 Se muestra este error cuando la facturación no está habilitada para el proyecto. Habilita la facturación para el proyecto en Google Cloud Console.
blocked 403 Se muestra este error cuando BigQuery pone en la lista negra de manera temporal la operación que intentaste realizar, por lo general, para evitar una suspensión del servicio. Este error ocurre con muy poca frecuencia. Comunícate con el equipo de asistencia para obtener más información.
duplicate 409 Se muestra este error cuando intentas crear un trabajo, un conjunto de datos o una tabla que ya existe. También se muestra cuando la propiedad writeDisposition de un trabajo se establece en WRITE_EMPTY y la tabla de destino a la que accede el trabajo ya existe. Cambia el nombre del recurso que intentas crear o cambia el valor writeDisposition en el trabajo.
internalError 500 Se muestra este error cuando ocurre un error interno en BigQuery. Vuelve a intentar la operación y, si el error persiste, comunícate con el equipo de asistencia o informa un error mediante la herramienta de seguimiento de errores de BigQuery.
invalid 400 Se muestra este error cuando hay algún tipo de entrada no válida que no es una consulta no válida, como campos obligatorios faltantes o un esquema de tabla no válido. En cambio, las consultas no válidas muestran un error invalidQuery.
invalidQuery 400 Se muestra este error cuando intentas ejecutar una consulta no válida. Verifica de nuevo que tu consulta no tenga errores de sintaxis. La referencia de consulta contiene descripciones y ejemplos de cómo crear consultas válidas.
notFound 404 Se muestra este error cuando haces referencia a un recurso (un conjunto de datos, una tabla o un trabajo) que no existe. Esto también puede ocurrir cuando usas decoradores de instantáneas para hacer referencia a las tablas borradas que recibieron transmisiones hace poco. Corrige los nombres de los recursos o espera al menos 6 horas luego de la transmisión antes de consultar una tabla borrada.
notImplemented 501 Se muestra este error de trabajo cuando intentas acceder a una característica no implementada. Comunícate con el equipo de asistencia para obtener más información.
quotaExceeded 403 Se muestra este error cuando tu proyecto excede una cuota de BigQuery o una cuota personalizada. También se muestra cuando no estableciste la facturación y excediste el nivel gratuito de consultas. Observa la propiedad message del objeto de error para obtener más información sobre qué cuota se superó. Para restablecer o aumentar una cuota de BigQuery, comunícate con el equipo de asistencia. Para modificar una cuota personalizada, envía una solicitud desde la página de Google Cloud Console. Si recibes este error cuando usas la zona de pruebas de BigQuery, puedes actualizar.
rateLimitExceeded 403 Se muestra este error si tu proyecto excede el límite de frecuencia simultánea o el límite de solicitudes a la API con el envío de muchas solicitudes muy rápido. Disminuye el porcentaje de solicitudes.

Si crees que tu proyecto no excedió uno de estos límites, comunícate con el equipo de asistencia.

resourceInUse 400 Se muestra este error cuando intentas borrar un conjunto de datos que contiene tablas o cuando intentas borrar un trabajo que está en ejecución. Vacía el conjunto de datos antes de intentar borrarlo o espera a que un trabajo se complete para borrarlo.
resourcesExceeded 400 Se muestra este error cuando tu consulta usa demasiados recursos.
  • Intenta dividir la consulta en partes más pequeñas.
  • Intenta quitar una cláusula ORDER BY.
  • Si tu consulta usa JOIN, asegúrate de que la tabla más grande se encuentre en el lado izquierdo de la cláusula.
  • Si tu consulta usa FLATTEN, debes determinar si es necesario para tu caso práctico. A fin de obtener más información, consulta los datos anidados y repetidos.
  • Si tu consulta usa EXACT_COUNT_DISTINCT, considera reemplazarlo por COUNT(DISTINCT).
  • Si tu consulta usa COUNT(DISTINCT <value>, <n>) con un valor <n> grande, considera usar GROUP BY en su lugar. Para obtener más información, consulta COUNT(DISTINCT).
  • Si tu consulta usa UNIQUE, considera usar GROUP BY en su lugar, o una función analítica dentro de una subselección.
responseTooLarge 403 Se muestra este error cuando los resultados de tu consulta son más grandes que el tamaño máximo de respuesta. Algunas consultas se ejecutan en múltiples etapas. Este error se muestra cuando cualquiera de las etapas muestra un tamaño de respuesta que es demasiado grande, incluso si el resultado final es menor que el máximo. Se suele mostrar este error cuando las consultas usan una cláusula ORDER BY. A veces, agregar una cláusula LIMIT o quitar la cláusula ORDER BY sirve de ayuda. Si deseas garantizar que se puedan mostrar resultados grandes, puedes establecer la propiedad allowLargeResults en true y especificar una tabla de destino.
stopped 200 Se muestra este código de estado cuando se cancela un trabajo.
tableUnavailable 400 Ciertas tablas de BigQuery se respaldan con datos que administran otros equipos de productos de Google. Este error indica que una de esas tablas no se encuentra disponible. Cuando encuentres este mensaje de error, puedes volver a enviar tu solicitud (consulta sugerencias para solucionar problemas internalError) o comunicarte con el equipo de productos de Google que te otorgó el acceso a sus datos.

Muestra de respuesta de error

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"
  }
}

Errores de autenticación

Los errores del sistema de generación de tokens OAuth muestran el siguiente objeto JSON, que define la especificación OAuth2.

{"error" : "description_string"}

Este error va acompañado de un error HTTP 400 de solicitud incorrecta o un error HTTP 401 de falta de autorización. description_string es uno de los códigos de error que define la especificación OAuth2. Por ejemplo:

{"error":"invalid_client"}

Volver al principio

Solución de problemas de inserción de transmisión

En las secciones siguientes, se analiza cómo solucionar errores que ocurren cuando transmites datos a BigQuery.

Códigos de respuesta HTTP de falla

Si recibes un código de respuesta HTTP de falla, como un error de red, no hay forma de saber si la inserción de transmisión se realizó de forma correcta. Si solo intentas volver a enviar la solicitud, puede que dé como resultado filas duplicadas en tu tabla. Para proteger tu tabla de la duplicación, establece la propiedad insertId cuando envíes tu solicitud. BigQuery usa la propiedad insertId para la anulación de la duplicación.

Si recibes un error de permiso, un error de nombre de tabla no válido o un error de cuota excedida, no se insertan filas y la solicitud en su totalidad falla.

Códigos de respuesta HTTP de operación completada

Incluso si recibes un código de respuesta HTTP correcto, deberás verificar la propiedad insertErrors de la respuesta para determinar si las inserciones de fila se completaron, ya que es posible que BigQuery solo haya insertado de forma correcta algunas de las filas.

Si la propiedad insertErrors es una lista vacía, todas las filas se insertaron de forma correcta. De lo contrario, excepto en los casos en los que no coincide el esquema en alguna de las filas, las filas indicadas en la propiedad insertErrors no se insertaron, pero sí lo hicieron todas las otras. La propiedad errors contiene información detallada sobre por qué falló cada fila no exitosa. La propiedad index indica el índice de filas basado en 0 de la solicitud a la que se aplica el error.

Si BigQuery descubre que el esquema de filas individuales no coincide en la solicitud, no se inserta ninguna de las filas y se muestra una entrada insertErrors para cada fila, incluso las filas que no tuvieron problemas de coincidencia del esquema. Las filas cuyos esquemas coincidieron tendrán un error con la propiedad reason establecida en stopped y se pueden volver a enviar como están. Las filas que tuvieron un error incluyen información detallada sobre la falta de coincidencia del esquema.

Errores de metadatos para inserción de transmisión

Debido a que la API de transmisión de BigQuery está diseñada para un gran volumen de inserciones, las modificaciones a la exhibición de metadatos de la tabla subyacente presentan coherencia eventual cuando se interactúa con el sistema de transmisión. En la mayoría de los casos, los cambios de metadatos se propagan en minutos, pero, durante este período, las respuestas de la API pueden mostrar el estado inconsistente de la tabla.

A continuación, se describen algunas situaciones:

  • Cambios en el esquema. Modificar el esquema de una tabla que recibió inserciones de transmisión hace poco puede dar como resultado errores de no coincidencia del esquema, ya que es posible que el sistema de transmisión no reciba el cambio del esquema de inmediato.
  • Creación o eliminación de tablas. Transmitir a una tabla inexistente mostrará la variación de una respuesta notFound. Puede que las inserciones de transmisión posteriores no reconozcan de inmediato la creación de una tabla como respuesta. De manera similar, borrar o volver a crear una tabla puede crear un período en el que las inserciones de transmisión se envíen de manera efectiva a la tabla anterior. Es posible que las inserciones de transmisión no estén presentes en la tabla nueva.
  • Truncamiento de tabla. Truncar los datos de una tabla (mediante un trabajo de consulta que use writeDisposition de WRITE_TRUNCATE) puede causar que se descarten las inserciones posteriores durante el período de coherencia.

Datos faltantes o no disponibles

Las inserciones de transmisión residen de manera temporal en el búfer de transmisión, cuyas características de disponibilidad son distintas de las del almacenamiento administrado. Ciertas operaciones en BigQuery no interactúan con el búfer de transmisión, como los trabajos de copia de tablas y los métodos de API, como tabledata.list. Los datos de transmisión recientes no estarán presentes en la tabla de destino ni en el resultado.

Volver al principio