Soluciona problemas de suscripciones a BigQuery

En esta página, se proporcionan algunas sugerencias comunes para solucionar problemas de suscripciones a BigQuery.

Cómo comprobar el estado de una suscripción a BigQuery

Para comprobar el estado de una suscripción, sigue estos pasos:

  1. En la consola de Google Cloud, ve a la página de suscripción de Pub/Sub.

    Ir a Suscripciones

  2. Marca el ícono de Estado de tu suscripción a BigQuery.

    Si el ícono es una marca de verificación verde, significa que la suscripción está en buen estado.

    Si el ícono es un signo de exclamación rojo, la suscripción tiene un estado de error.

  3. Haz clic en la suscripción a BigQuery.

    Se abrirá la página de detalles de la suscripción.

  4. Busca el mensaje de error en Estado de la suscripción.

  5. Según el mensaje de error, ve a la sección relevante en esta página para solucionar el problema.

Una vez resuelto el problema, la suscripción finalmente vuelve a un estado correcto.

No se pudo crear ni actualizar la suscripción

Estos son algunos de los problemas comunes que puedes encontrar si tienes inconvenientes para crear o actualizar una suscripción a BigQuery.

Error de tabla no encontrada

Si la tabla que especificas en el flujo de trabajo de creación o actualización de suscripciones no existe, el flujo de trabajo muestra un error de tabla no encontrada. En la consola de Google Cloud, el mensaje es similar al siguiente:

The BigQuery table or dataset specified cannot be found.

Para resolver el problema, crea la tabla y asegúrate de poder verificar su state antes de usarla con una suscripción a BigQuery.

Error de coincidencia de esquema

Si los esquemas de la tabla y el tema no son compatibles, el flujo de trabajo de creación o actualización de suscripciones muestra un error de no coincidencia del esquema. En la consola de Google Cloud, el mensaje es similar al siguiente:

Incompatible schema type for field project_ids: expected INT64, got STRING

El mensaje de error especificado es cuando el esquema no coincide en un campo llamado project_ids. Según el tipo de discrepancia del esquema que tengas, es posible que veas una variación diferente del mensaje de error.

Para resolver el problema, verifica si las asignaciones de esquemas son compatibles.

Error de la cuenta de servicio

Si no configuraste la cuenta de servicio de Pub/Sub con los permisos correctos, el flujo de trabajo para crear o actualizar suscripciones mostrará un error. En la consola de Google Cloud, el mensaje es similar al siguiente:

Service account service-1234234234@gcp-sa-pubsub.iam.gserviceaccount.com
is missing permissions required to write to the BigQuery table:
bigquery.tables.get, bigquery.tables.updateData.

Para resolver el problema, verifica si la cuenta de servicio tiene los permisos correctos.

El estado de la suscripción muestra un signo de exclamación rojo

Si editas la tabla después de crear una suscripción, esto puede afectar la forma en que Pub/Sub escribe mensajes en la tabla. Si un cambio genera un problema, el campo de estado de la suscripción se establece en un estado de error.

En la página de detalles de la suscripción, comprueba el estado del campo Subscription state. El campo Subscription state proporciona un error más específico, que puede ser uno de los siguientes:

  • table not found: Se borró la tabla. Crea una tabla y verifica su estado. Consulta cómo obtener información de la tabla.

  • permiso denegado a la tabla: la cuenta de servicio de Pub/Sub ya no tiene permiso para escribir en la tabla. Verifica si la cuenta de servicio tiene los permisos correctos.

  • Discrepancia en el esquema de la tabla: El esquema de la tabla ya no es compatible con la configuración de suscripción de BigQuery. Comprueba si las asignaciones de esquemas son compatibles.

Mientras una suscripción a Pub/Sub se encuentra en estado de error, los mensajes no se escriben en la tabla de BigQuery y permanecen en las tareas pendientes de la suscripción. Ten en cuenta que los mensajes no se entregan a un tema de mensajes no entregados adjunto, si está configurado. Los mensajes no confirmados se conservan durante el período establecido en message_retention_duration(7 d, de forma predeterminada).

Se están acumulando tareas pendientes

Si ves una acumulación de mensajes en la suscripción o mensajes que van al tema de mensajes no entregados de la suscripción, revisa las siguientes causas posibles.

Mensaje de error INVALID_{8/}

Este error ocurre cuando el mensaje proporcionado está en un formato que Pub/Sub considera válido, pero el esquema de la tabla de destino de BigQuery no lo hace. Esto significa que uno o más campos del mensaje tienen valores que el esquema de la tabla de BigQuery no permite. Revisa la compatibilidad con esquemas para verificar que los tipos de datos y formatos sean correctos. Estos son algunos de los errores más comunes:

  • Una string vacía ("") no es un JSON válido. Cuando envíes datos a una columna de la tabla JSON de BigQuery anulable, proporciona un objeto JSON vacío ({}) o null, o una cadena JSON vacía ("\"\"") para representar los valores faltantes. Enviar una cadena vacía da como resultado un error.

  • Si el valor de un campo de mensaje excede la longitud máxima del campo de BigQuery, el mensaje falla debido a limitaciones de tamaño.

Para solucionar errores INVALID_ARGUMENT, agrega un tema de mensajes no entregados a la suscripción que te interesa. El tema de mensajes no entregados captura los mensajes que no se pudieron escribir en BigQuery, junto con un atributo llamado CloudPubSubDeadLetterSourceDeliveryErrorMessage que explica el motivo de la falla.

Estos errores de entrega también se pueden ver en el Explorador de métricas. Selecciona la métrica pubsub.googleapis.com/subscription/push_request_count y filtra por response_code=invalid_argument.

Mensaje de error de RESOURCE_EXHAUSTED

Si los mensajes se escriben en BigQuery con lentitud, es posible que debas aumentar la cuota de envío de Pub/Sub de tu proyecto o la cuota de capacidad de procesamiento de escritura del almacenamiento de BigQuery. Para verificar si te encuentras con limitaciones de cuota, examina la métrica de solicitudes de envío (subscription/push_request_count) para detectar cualquier error resource_exhausted.

Otra forma de diagnosticar los problemas de cuota es verificar la cuota del proyecto. Ve a IAM y administración > Cuotas dentro del proyecto que contiene tu recurso de Pub/Sub o instancia de BigQuery. Busca la cuota relevante, ya sea pubsub.googleapis.com/regionalpushsubscriber o bigquerystorage.googleapis.com/write/append_bytes. Si alguna de las dos cuotas necesita un aumento, puedes solicitar una cuota más alta.

Tabla particionada por hora que muestra __UNPARTITIONED__ en la columna de ID de partición

Cuando una tabla de destino de BigQuery se particiona por hora, las filas primero llegan a una partición especial etiquetada como __UNPARTITIONED__ dentro de la vista INFORMATION_SCHEMA.PARTITIONS. Este es el comportamiento esperado de las tablas que usan partición de tiempo de transferencia.

BigQuery emplea un búfer de transmisión para optimizar el proceso de escritura. Los datos pueden residir en la partición __UNPARTITIONED__ hasta que se acumule suficiente volumen o hasta que haya transcurrido al menos una hora. Después de que se cumplen estas condiciones, BigQuery vuelve a particionar los datos en la partición por hora correspondiente.

Puedes supervisar los datos dentro de la partición __UNPARTITIONED__ con la vista INFORMATION_SCHEMA.PARTITIONS.

¿Qué sigue?

  • Si aún tienes problemas con tu suscripción a BigQuery, consulta Obtén asistencia.