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 mensajes en una tabla de BigQuery existente a medida que se reciben. No necesitas configurar 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, desconectar o borrar una suscripción de BigQuery.
Sin el tipo de suscripción a BigQuery, necesitarás 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.
Sin embargo, se recomienda una canalización de Dataflow para los sistemas de Pub/Sub en los que se requiere alguna transformación de datos antes de que se almacenen en una tabla de BigQuery. Para obtener información sobre cómo transmitir datos de Pub/Sub a BigQuery con transformación mediante Dataflow, consulta Transmite datos de Pub/Sub a BigQuery.
La plantilla de suscripción de Pub/Sub a BigQuery desde Dataflow aplica la entrega de exactamente una vez de forma predeterminada. Por lo general, esto se logra a través de mecanismos de deduplicación dentro de la canalización de Dataflow. Sin embargo, la suscripción a BigQuery solo admite una entrega al menos una vez. Si la anulación de duplicación exacta es fundamental para tu caso de uso, considera los procesos descendentes en BigQuery para controlar los duplicados potenciales.
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é podrías querer 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 hace referencia a la Figura 1:
- Pub/Sub usa la API de escritura de almacenamiento de BigQuery 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 muestra una respuesta de OK.
- Si hay fallas en la operación de escritura, el mensaje de Pub/Sub se confirma de forma negativa. Luego, se vuelve a enviar el mensaje. Si el mensaje falla varias 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 a BigQuery determinan la tabla de BigQuery en la que Pub/Sub escribe los mensajes y el tipo de esquema de esa tabla.
Para obtener más información, consulta Propiedades de BigQuery.
Compatibilidad de esquemas
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 Protocol Buffer, mientras que los esquemas de BigQuery se definen con una variedad de formatos.
A continuación, se muestra 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 un campo con formato incorrecto no se escriben en BigQuery.
En el esquema de BigQuery,
INT
,SMALLINT
,INTEGER
,BIGINT
,TINYINT
yBYTEINT
son alias deINTEGER
;DECIMAL
es un alias deNUMERIC
yBIGDECIMAL
es un alias deBIGNUMERIC
.Cuando el tipo en el esquema de tema es
string
y el tipo en la tabla de BigQuery esJSON
,TIMESTAMP
,DATETIME
,DATE
,TIME
,NUMERIC
oBIGNUMERIC
, cualquier valor de 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 Avro equivalente que annotate, como se detalla en la especificación de Avro.
A continuación, se muestra una colección de asignaciones de diferentes formatos de esquemas a los tipos de datos de BigQuery.
Tipos de Avro
Tipo 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 |
INTEGER |
Tipos lógicos de Avro
Tipos lógicos de Avro | Tipo de datos de BigQuery |
timestamp-micros |
TIMESTAMP |
date |
DATE |
time-micros |
TIME |
duration |
INTERVAL |
decimal |
NUMERIC o BIGNUMERIC |
Tipos de búfer de protocolo
Tipo de búfer de protocolo | Tipo de datos de BigQuery |
double |
FLOAT64 , NUMERIC o
BIGNUMERIC |
float |
FLOAT64 , NUMERIC o
BIGNUMERIC |
int32 |
INTEGER , NUMERIC , BIGNUMERIC o DATE |
int64 |
INTEGER , NUMERIC ,
BIGNUMERIC , DATE ,
DATETIME o TIMESTAMP |
uint32 |
INTEGER , NUMERIC , BIGNUMERIC o DATE |
uint64 |
NUMERIC o BIGNUMERIC |
sint32 |
INTEGER , NUMERIC o
BIGNUMERIC |
sint64 |
INTEGER , NUMERIC ,
BIGNUMERIC , DATE ,
DATETIME o TIMESTAMP |
fixed32 |
INTEGER , NUMERIC , BIGNUMERIC o DATE |
fixed64 |
NUMERIC o BIGNUMERIC |
sfixed32 |
INTEGER , NUMERIC , BIGNUMERIC o DATE |
sfixed64 |
INTEGER , NUMERIC ,
BIGNUMERIC , DATE ,
DATETIME o TIMESTAMP |
bool |
BOOLEAN |
string |
STRING , JSON ,
TIMESTAMP , DATETIME ,
DATE , TIME ,
NUMERIC o BIGNUMERIC |
bytes |
BYTES , NUMERIC o
BIGNUMERIC |
enum |
INTEGER |
message |
RECORD/STRUCT |
oneof |
Sin asignar |
map<KeyType, ValueType> |
REPEATED RECORD<key KeyType, value
ValueType> |
enum |
INTEGER |
repeated/array of Type |
REPEATED Type |
Representación de números enteros de fecha y hora
Cuando se asigna un número entero a uno de los tipos de fecha o hora, el número debe representar el valor correcto. A continuación, se muestra la asignación de los tipos de datos de BigQuery al número entero que los representa.
Tipo de datos de BigQuery | Representación de números enteros |
DATE |
Es la cantidad de días transcurridos desde la época Unix, el 1 de enero de 1970. |
DATETIME |
La fecha y la hora en microsegundos expresadas como hora civil con CivilTimeEncoder |
TIME |
Es la hora en microsegundos expresada como hora civil con CivilTimeEncoder. |
TIMESTAMP |
Es la cantidad de microsegundos desde la época Unix, 1 de enero de 1970 a las 00:00:00 UTC. |
Captura de datos modificados de BigQuery
Las suscripciones a BigQuery admiten actualizaciones de captura de datos modificados (CDC) cuando use_topic_schema
o use_table_schema
se configuran como true
en las propiedades de suscripción. Para usar la función con use_topic_schema
, establece el esquema del tema con los siguientes campos:
_CHANGE_TYPE
(obligatorio): Es un campostring
configurado comoUPSERT
oDELETE
.Si un mensaje de Pub/Sub escrito en la tabla de BigQuery tiene
_CHANGE_TYPE
establecido enUPSERT
, BigQuery actualiza la fila con la misma clave si existe o inserta una fila nueva si no es así.Si un mensaje de Pub/Sub escrito en la tabla de BigQuery tiene
_CHANGE_TYPE
establecido enDELETE
, BigQuery borra la fila de la tabla con la misma clave si existe.
_CHANGE_SEQUENCE_NUMBER
(opcional): Es un campoint64
(long
) configurado para garantizar que las actualizaciones y eliminaciones realizadas en la tabla de BigQuery se procesen en orden. Los mensajes para la misma clave de fila deben contener un valor monótonamente creciente para_CHANGE_SEQUENCE_NUMBER
. Los mensajes con números de secuencia que son menores que el número de secuencia más alto procesado para una fila no tienen ningún efecto en la fila de la tabla de BigQuery. Ten en cuenta que Pub/Sub requiere un valor basado en un número entero, en lugar de el valor basado en una cadena que se usa cuando se interactúa directamente con BigQuery.
Para usar la función con use_table_schema
, incluye los campos anteriores en el mensaje JSON.
Permisos de la cuenta de servicio de Pub/Sub
Para crear una suscripción a BigQuery, la cuenta de servicio de Pub/Sub debe tener permiso para escribir en la tabla de BigQuery específica y leer los metadatos de la tabla. Para obtener más información, consulta Cómo asignar roles de BigQuery a la cuenta de servicio de Pub/Sub.
Controla los errores en los mensajes
Cuando un mensaje de Pub/Sub no se puede escribir en
BigQuery, no se puede confirmar. Para reenviar esos mensajes que no se pueden entregar, configura un tema de mensajes no entregados en la suscripción de BigQuery. El mensaje de Pub/Sub
reenviado al tema de mensajes no entregados contiene un atributo
CloudPubSubDeadLetterSourceDeliveryErrorMessage
que indica el motivo por el que
el mensaje de Pub/Sub no se pudo escribir en
BigQuery.
Si Pub/Sub no puede escribir mensajes en BigQuery, entonces se inhabilita la entrega de mensajes de una manera similar al comportamiento de inhabilitación de push. Sin embargo, si la suscripción tiene un tema de mensajes no entregados adjunto, Pub/Sub no revierte la entrega cuando las fallas de los mensajes se deben a errores de compatibilidad del esquema.
Cuotas y límites
Existen limitaciones de cuota en la capacidad de procesamiento de los suscriptores de BigQuery por región. Para obtener más información, consulta Cuotas y límites de Pub/Sub.
Las suscripciones de BigQuery escriben datos con la API de BigQuery Storage Write. Para obtener información sobre las cuotas y los límites de la API de Storage Write, consulta Solicitudes a la API de BigQuery Storage Write. Las suscripciones a BigQuery solo consumen la cuota de capacidad de procesamiento de la API de Storage Write. En este caso, puedes ignorar las otras consideraciones de cuota de la API de Storage Write.
Precios
Para conocer los precios de las suscripciones a BigQuery, consulta la página de precios de Pub/Sub.
¿Qué sigue?
Crea una suscripción, como una suscripción a BigQuery.
Solucionar problemas de una suscripción a BigQuery
Obtén información sobre BigQuery.
Revisa los precios de Pub/Sub, incluidas las suscripciones a BigQuery.
Crea o modifica una suscripción con los comandos de la CLI de
gcloud
.Crea o modifica una suscripción con las APIs de REST.