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 a BigQuery.
Sin el tipo de suscripción de BigQuery, necesitas una suscripción de extracción o de envío y un suscriptor (como Dataflow) que lea los 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, aún 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 los datos se almacenen en una tabla de BigQuery. Para aprender a transmitir datos de Pub/Sub a BigQuery con la transformación mediante Dataflow, consulta Transmite de Pub/Sub a BigQuery.
La suscripción de Pub/Sub a la plantilla de BigQuery desde Dataflow aplica la entrega “exactamente una vez” de forma predeterminada. Por lo general, esto se logra a través de mecanismos de anulación de duplicación dentro de la canalización de Dataflow. Sin embargo, la suscripción a BigQuery solo admite al menos una entrega. Si la anulación de duplicación exacta es fundamental para tu caso práctico, considera los procesos descendentes 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é es posible que desees usar una suscripción a BigQuery.
Cómo funciona BigQuery y cómo configurar y administrar tablas de BigQuery
Flujo de trabajo de suscripciones 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 por lotes a la tabla de BigQuery.
- Después de completar con éxito una operación de escritura, la API muestra una respuesta OK.
- Si hay fallas en la operación de escritura, el mensaje de Pub/Sub se confirma de forma negativa. El mensaje se vuelve a enviar. Si el mensaje falla la cantidad de veces necesaria 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 mensajes y el tipo de esquema de esa tabla.
Para obtener más información, consulta las propiedades de BigQuery.
Compatibilidad con esquemas
Pub/Sub y BigQuery usan formas diferentes 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 mediante una variedad de formatos. La siguiente es una lista de información importante sobre la compatibilidad de esquemas entre un tema de Pub/Sub y una tabla de BigQuery.
Los mensajes que contienen un campo con un formato incorrecto no se escriben en BigQuery.
En el esquema de BigQuery,
INT
,SMALLINT
,INTEGER
,BIGINT
,TINYINT
yBYTEINT
son alias paraINTEGER
;DECIMAL
es un alias paraNUMERIC
, yBIGDECIMAL
es un alias paraBIGNUMERIC
.Cuando el tipo en el esquema de tema es una
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. Cualquier tipo lógico que no se enumere solo coincidirá con el tipo de Avro equivalente que anota, como se detalla en la especificación de Avro.
A continuación, se muestra una colección de la asignación de diferentes formatos de esquema a los 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 |
Imposible de asignar |
fixed |
BYTES , NUMERIC o BIGNUMERIC |
enum |
INTEGER |
Tipos lógicos de Avro
Tipo lógico de Avro | Tipo de datos de BigQuery |
timestamp-micros |
TIMESTAMP |
date |
DATE |
time-micros |
TIME |
duration |
INTERVAL |
Tipos de búferes 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 |
Imposible de 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 realiza la asignación de un número entero a uno de los tipos de fecha o de 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 |
El número de días desde la época Unix, 1 de enero de 1970 |
DATETIME |
La fecha y la hora en microsegundos expresadas como hora civil mediante CivilTimeEncoder. |
TIME |
La hora en microsegundos expresada como hora civil mediante CivilTimeEncoder. |
TIMESTAMP |
La cantidad de microsegundos desde el tiempo Unix, 1 de enero de 1970 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 en true
en las propiedades de suscripción. Para usar la función con use_topic_schema
, configura 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
configurado comoUPSERT
, BigQuery actualiza la fila con la misma clave si existe o inserta una nueva si no lo hace.Si un mensaje de Pub/Sub escrito en la tabla de BigQuery tiene el valor
_CHANGE_TYPE
configurado comoDELETE
, BigQuery borra la fila de la tabla con la misma clave, si es que existe.
_CHANGE_SEQUENCE_NUMBER
(opcional): Es un campoint64
(long
) oint32
(int
) configurado para garantizar que las actualizaciones y eliminaciones realizadas en la tabla de BigQuery se procesen en orden. Los mensajes de la misma clave de fila deben contener un valor que aumente monótonamente 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.
Para usar la función con use_table_schema
, incluye los campos anteriores en el mensaje JSON.
Permisos de 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 específica de BigQuery y leer los metadatos de la tabla. Para obtener más información, consulta Asigna funciones de BigQuery a la cuenta de servicio de Pub/Sub.
Maneja las fallas de los mensajes
Cuando no se puede escribir un mensaje de Pub/Sub en BigQuery, no se puede confirmar el mensaje. Para reenviar estos mensajes que no se pueden entregar, configura un tema de mensajes no entregados en la suscripción a BigQuery. El mensaje de Pub/Sub reenviado al tema de mensajes no entregados contiene un atributo CloudPubSubDeadLetterSourceDeliveryErrorMessage
que indica el motivo por el que no se pudo escribir el mensaje de Pub/Sub en BigQuery.
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 a BigQuery escriben datos mediante 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 Storage Write de BigQuery. Las suscripciones de BigQuery solo consumen la cuota de capacidad de procesamiento de la API de Storage Write. Puedes ignorar las otras consideraciones de cuota de la API de Storage Write en esta instancia.
Precios
Para obtener información sobre los precios de las suscripciones a BigQuery, consulta la página de precios de Pub/Sub.
¿Qué sigue?
Crea una suscripción, por ejemplo, una suscripción a BigQuery.
Soluciona los problemas de una suscripción a BigQuery.
Lee 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.