Solución de problemas

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 error

En la tabla siguiente, se muestra una lista de los códigos de error posibles cuando realizas 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, por configuración predeterminada no se muestra el objeto de error. A fin de ver el objeto y la propiedad reason correspondiente que se asigna a la tabla siguiente, 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 siguiente, el código de respuesta indica un problema o 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 como un conjunto de datos de tabla o un trabajo al que no tienes acceso. También se muestra cuando intentas modificar un objeto de solo lectura. Comunícate con el propietario del recurso y pídele acceso a este.
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, espera unos segundos y vuelve a intentarlo. Sin embargo, existen dos casos especiales para la solución de problemas de este error: las llamadas a jobs.get() y a jobs.insert().

Llamadas a 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 tuvo éxito o no. 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 Platform 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 está establecida en WRITE_EMPTY y la tabla de destino a la que accede el trabajo ya existe. Otorga un nombre nuevo al 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. Comunícate con el equipo de asistencia o informa un error con el seguimiento de problemas 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 construir consultas válidas.
notFound 404 Se muestra este error cuando te refieres 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 referirte a las tablas borradas a las que se realizaron transmisiones hace poco. Arregla 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, una cuota personalizada o cuando no estableciste la facturación y excediste el nivel gratuito de consultas. Consulta la propiedad message del objeto de error para obtener más información sobre la cuota excedida. Para reiniciar o aumentar una cuota de BigQuery, comunícate con el equipo de asistencia. A fin de modificar una cuota personalizada, envía una solicitud desde la página de Google Cloud Platform 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, determina si es necesario para tu caso práctico. A fin de obtener más información, consulta datos anidados y repetidos.
  • Si tu consulta usa EXACT_COUNT_DISTINCT, considera reemplazarlo con COUNT(DISTINCT).
  • Si tu consulta usa COUNT(DISTINCT <value>, <n>) con un valor <n> más grande, considera reemplazarlo con GROUP BY. A fin de obtener más información, consulta COUNT(DISTINCT).
  • Si tu consulta usa UNIQUE, considera reemplazarlo con GROUP BY 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. Por lo general, este error sucede con consultas que usan una cláusula ORDER BY. A veces, agregar una cláusula LIMIT o quitar la cláusula ORDER BY es de ayuda. Si quieres asegurarte de que puedan mostrarse 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 Determinadas 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 intentar tu solicitud (consulta sugerencias para la solución de problemas internalError) o comunícate con el equipo de producto de Google que te otorgó el acceso a sus datos.

Muestra de respuesta de error

GET https://www.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 objeto JSON siguiente, 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 No autorizado. 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 tuvo éxito. 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ías tu solicitud. BigQuery usa la propiedad insertId para la desduplicació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 entera falla.

Códigos de respuesta HTTP de éxito

Incluso si recibes un código de respuesta HTTP de éxito, deberás verificar la propiedad insertErrors de la respuesta para determinar si las inserciones de filas tuvieron éxito, ya que es posible que BigQuery tuviera éxito de forma parcial cuando insertó las filas.

Si la propiedad insertErrors es una lista vacía, todas las filas se insertaron con éxito. 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 con éxito. 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 encuentra 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 mostrarán un error con la propiedad reason establecida en stopped y pueden reenviarse como están. Las filas que fallaron incluyen información detallada sobre la no 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 rangos altos de inserción, las modificaciones a la exhibición de metadatos de la tabla subyacente presentan coherencia eventual cuando interactúan con el sistema de transmisión. En la mayoría de los casos, los cambios a metadatos se propagan en minutos, pero durante este período, las respuestas de la API pueden mostrar un estado inconsistente de la tabla.

A continuación, se describen algunas situaciones:

  • Cambios de 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 el sistema de transmisión puede que no recoja el cambio de esquema.
  • Creación o eliminación de tabla: la transmisión a una tabla inexistente mostrará una variación de una respuesta notFound. Puede que las inserciones de transmisión subsecuentes no reconozcan de inmediato la creación de una tabla como respuesta. De manera similar, borrar o volver a crear una tabla puede producir un período en el que las inserciones de transmisión se envíen de manera efectiva a la tabla anterior y no estarán presentes en la tabla recién creada.
  • Truncamiento de tabla: truncar los datos de una tabla (p. ej., con un trabajo de consulta que usa writeDisposition de WRITE_TRUNCATE) puede causar que se descarten las inserciones subsecuentes 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, que tiene diferentes características de disponibilidad a comparación del almacenamiento administrado. Ciertas operaciones en BigQuery no interactúan con el búfer de transmisión, como los trabajos de copia de tabla y los métodos de la API, como las listas de datos de tabla. Como tales, los datos de transmisión recientes no estarán presentes en la tabla de destino o en el resultado.

Volver al principio

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Si necesitas ayuda, visita nuestra página de asistencia.