Solucionar problemas con las suscripciones de BigQuery

En esta página se ofrecen algunos consejos para solucionar problemas habituales con las suscripciones de BigQuery.

Consultar el estado de una suscripción de BigQuery

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

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

    Ir a Suscripciones

  2. Comprueba el icono de Estado de tu suscripción a BigQuery.

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

    Si el icono es un signo de exclamación rojo, significa que la suscripción está en un estado de error.

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

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

  4. Consulta el estado de la suscripción para ver el mensaje de error.

  5. En función del mensaje de error, ve a la sección correspondiente de esta página para solucionar el problema.

Una vez que se haya resuelto el problema, la suscripción volverá a estar en buen estado.

No se puede crear ni actualizar la suscripción

Estos son algunos de los problemas habituales que pueden surgir si tienes problemas para crear o actualizar una suscripción de BigQuery.

Error de tabla no encontrada

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

The BigQuery table or dataset specified cannot be found.

Para solucionar el problema, crea la tabla y asegúrate de que puedes consultar su estado antes de usarla con una suscripción de BigQuery.

Error de discrepancia de esquema

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

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

El mensaje de error especificado se debe a una discrepancia de esquema en un campo llamado project_ids. En función del tipo de error de coincidencia de esquemas que tengas, es posible que veas una variación diferente del mensaje de error.

Para solucionar el problema, comprueba si las asignaciones de esquemas son compatibles.

Error de cuenta de servicio

Si no has configurado la cuenta de servicio de Pub/Sub con los permisos adecuados, el flujo de trabajo de creación o actualización de la suscripción devolverá un error. En la consola 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 solucionar el problema, comprueba 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, puede afectar a la forma en que Pub/Sub escribe mensajes en la tabla. Si un cambio provoca 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:

  • No se ha encontrado la tabla: la tabla se ha eliminado. Crea una tabla y comprueba su estado. Consulta Obtener información de una tabla.

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

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

Mientras una suscripción de Pub/Sub está en estado de error, los mensajes no se escriben en la tabla de BigQuery y permanecen en la acumulación de la suscripción. Ten en cuenta que los mensajes no se envían a un tema de mensajes fallidos adjunto, si se ha configurado. Los mensajes sin confirmar se conservan durante el periodo establecido en message_retention_duration(7 días de forma predeterminada).

Se está acumulando un backlog

Si ves que se acumula un gran número de mensajes en la suscripción o que los mensajes se envían al tema de mensajes fallidos de una suscripción, revisa las posibles causas que se indican a continuación.

Mensaje de error INVALID_ARGUMENT

Este error se produce cuando el mensaje proporcionado tiene un formato que Pub/Sub considera válido, pero el esquema de la tabla de destino de BigQuery no. Esto significa que uno o varios campos del mensaje tienen valores que no están permitidos por el esquema de la tabla de BigQuery. Revise la compatibilidad del esquema para comprobar que los tipos y formatos de datos sean correctos. Estos son algunos de los errores más habituales:

  • Una cadena vacía ("") no es un JSON válido. Cuando envíes datos a una columna de tabla de BigQuery JSON que admite valores nulos, proporciona un objeto JSON vacío ({}), null o una cadena JSON vacía ("\"\"") para representar los valores que faltan. Si se envía una cadena vacía, se produce un error.

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

Para solucionar los errores de INVALID_ARGUMENT, añada un tema de mensajes fallidos a la suscripción de interés. El tema de mensajes fallidos captura los mensajes que no se han podido escribir en BigQuery, junto con un atributo llamado CloudPubSubDeadLetterSourceDeliveryErrorMessage que explica el motivo del fallo.

Estos fallos de entrega también se pueden ver en el explorador de métricas. Seleccione la métrica pubsub.googleapis.com/subscription/push_request_count y filtre por response_code=invalid_argument.

Mensaje de error RESOURCE_EXHAUSTED

Si los mensajes se escriben en BigQuery lentamente, puede que tengas que aumentar la cuota de inserción de Pub/Sub o la cuota de capacidad de escritura de almacenamiento de BigQuery de tu proyecto. Para comprobar si tienes limitaciones de cuota, examina la métrica de solicitudes push (subscription/push_request_count) para ver si hay errores resource_exhausted.

Otra forma de diagnosticar problemas de cuota es comprobar la cuota del proyecto. Ve a Gestión de identidades y accesos y administración > Cuotas en el proyecto que contiene tu recurso de Pub/Sub o tu instancia de BigQuery. Busca la cuota correspondiente, ya sea pubsub.googleapis.com/regionalpushsubscriber o bigquerystorage.googleapis.com/write/append_bytes. Si necesitas aumentar alguna de las cuotas, puedes solicitar un ajuste de cuota.

Tabla con particiones por horas que muestra __UNPARTITIONED__ en la columna ID de partición

Cuando una tabla de destino de BigQuery se particiona por horas, las filas se insertan inicialmente en una partición especial etiquetada como __UNPARTITIONED__ en la vista INFORMATION_SCHEMA.PARTITIONS. Este comportamiento es normal en las tablas que usan particiones por hora de ingestión.

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

Puede monitorizar los datos de la partición __UNPARTITIONED__ con la vista INFORMATION_SCHEMA.PARTITIONS.

Siguientes pasos

  • Si sigues teniendo problemas con tu suscripción a BigQuery, consulta la sección Obtener asistencia.