En este documento, se proporciona una descripción general de una suscripción a BigQuery, su flujo de trabajo y las propiedades asociadas.
Una suscripción a BigQuery es un tipo de suscripción de exportación que escribe los mensajes en una tabla de BigQuery existente a medida que se reciben. No es necesario que configures un cliente suscriptor independiente. Usa la consola de Google Cloud , Google Cloud CLI, las bibliotecas cliente o la API de Pub/Sub para crear, actualizar, enumerar, separar o borrar una suscripción de BigQuery.
Sin el tipo de suscripción a BigQuery, necesitas una suscripción de extracción o de envío y un suscriptor (como Dataflow) que lea mensajes y los escriba en una tabla de BigQuery. La sobrecarga de ejecutar un trabajo de Dataflow no es necesaria cuando los mensajes no requieren procesamiento adicional antes de almacenarlos en una tabla de BigQuery; en su lugar, puedes usar una suscripción a BigQuery.
Para realizar modificaciones ligeras en los mensajes, puedes adjuntar una transformación de mensaje único a tu suscripción de BigQuery. Sin embargo, se recomienda una canalización de Dataflow para los sistemas de Pub/Sub en los que se requiere una transformación de datos más compleja antes de que los datos se almacenen en una tabla de BigQuery, en especial si deseas crear ventanas o agregar datos en los mensajes.
Para aprender a transmitir datos de Pub/Sub a BigQuery con transformación usando Dataflow, consulta Transmite datos de Pub/Sub a BigQuery.
La plantilla de suscripción de Pub/Sub a BigQuery de Dataflow aplica la entrega exactamente una vez de forma predeterminada. Esto se suele lograr a través de mecanismos de anulación de duplicados dentro de la canalización de Dataflow. Sin embargo, la suscripción de BigQuery solo admite la entrega al menos una vez. Si la eliminación de duplicados exacta es fundamental para tu caso de uso, considera los procesos posteriores en BigQuery para controlar los posibles duplicados.
Antes de comenzar
Antes de leer este documento, asegúrate de estar familiarizado con lo siguiente:
Cómo funciona Pub/Sub y los diferentes términos de Pub/Sub
Los diferentes tipos de suscripciones que admite Pub/Sub y por qué te convendría usar una suscripción a BigQuery
Cómo funciona BigQuery y cómo configurar y administrar las tablas de BigQuery
Flujo de trabajo de suscripción a BigQuery
En la siguiente imagen, se muestra el flujo de trabajo entre una suscripción a BigQuery y BigQuery.
A continuación, se incluye una breve descripción del flujo de trabajo que se menciona en la Figura 1:
- Pub/Sub usa la API de BigQuery Storage Write (gRPC) para enviar datos a la tabla de BigQuery.
- Los mensajes se envían en lotes a la tabla de BigQuery.
- Después de que se completa correctamente una operación de escritura, la API devuelve una respuesta OK.
- Si hay fallas en la operación de escritura, se envía una confirmación negativa del mensaje de Pub/Sub. Luego, se vuelve a enviar el mensaje. Si el mensaje falla suficientes veces y hay un tema de mensajes no entregados configurado en la suscripción, el mensaje se mueve al tema de mensajes no entregados.
Propiedades de una suscripción a BigQuery
Las propiedades que configuras para una suscripción de BigQuery determinan la tabla de BigQuery en la que Pub/Sub escribe mensajes y el tipo de esquema de esa tabla.
Para obtener más información, consulta Propiedades de BigQuery.
Compatibilidad del esquema
Esta sección solo se aplica si seleccionas la opción Usar el esquema de tema cuando creas una suscripción a BigQuery.
Pub/Sub y BigQuery usan diferentes formas de definir sus esquemas. Los esquemas de Pub/Sub se definen en formato Apache Avro o búfer de protocolo, mientras que los esquemas de BigQuery se definen con una variedad de formatos.
A continuación, se incluye una lista de información importante sobre la compatibilidad del esquema entre un tema de Pub/Sub y una tabla de BigQuery.
Los mensajes que contienen campos con formato incorrecto no se escriben en BigQuery.
En el esquema de BigQuery,
INT,SMALLINT,INTEGER,BIGINT,TINYINTyBYTEINTson alias deINTEGER;DECIMALes un alias deNUMERIC, yBIGDECIMALes un alias deBIGNUMERIC.Cuando el tipo en el esquema del tema es
stringy el tipo en la tabla de BigQuery esJSON,TIMESTAMP,DATETIME,DATE,TIME,NUMERICoBIGNUMERIC, cualquier valor para este campo en un mensaje de Pub/Sub debe cumplir con el formato especificado para el tipo de datos de BigQuery.Se admiten algunos tipos lógicos de Avro, como se especifica en la siguiente tabla. Los tipos lógicos que no se enumeran solo coinciden con el tipo de Avro equivalente que anotan, como se detalla en la especificación de Avro.
A continuación, se incluye una colección de asignaciones de diferentes formatos de esquema a tipos de datos de BigQuery.
Tipos de Avro
| Tipo de Avro | Tipo de datos de BigQuery |
null |
Any NULLABLE |
boolean |
BOOLEAN |
int |
INTEGER, NUMERIC o
BIGNUMERIC |
long |
INTEGER, NUMERIC o
BIGNUMERIC |
float |
FLOAT64, NUMERIC o
BIGNUMERIC |
double |
FLOAT64, NUMERIC o
BIGNUMERIC |
bytes |
BYTES, NUMERIC o
BIGNUMERIC |
string |
STRING, JSON,
TIMESTAMP, DATETIME,
DATE, TIME,
NUMERIC o BIGNUMERIC |
record |
RECORD/STRUCT |
array de Type |
REPEATED Type |
map con el tipo de valor ValueType
|
REPEATED STRUCT <key STRING, value
ValueType> |
union con dos tipos, uno que es null y el otro Type |
NULLABLE Type |
otros union |
Sin asignar |
fixed |
BYTES, NUMERIC o
BIGNUMERIC |
enum |