En este documento, se brinda 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 existente de BigQuery como en los que se reciben. No es necesario que configures otro cliente suscriptor. 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 suscripción a 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 lee los mensajes y los escribe en una tabla de BigQuery. La sobrecarga de ejecutar un El trabajo de Dataflow no es necesario cuando los mensajes no requieren procesamiento adicional antes de almacenarlos en una tabla de BigQuery; puedes usar una suscripción a BigQuery.
Sin embargo, aún se recomienda una canalización de Dataflow para Sistemas de Pub/Sub en los que se requiere cierta transformación de datos antes se almacenan en una tabla de BigQuery. Para aprender a transmitir de datos de Pub/Sub a BigQuery con transformación con Dataflow, consulta Transmitir desde 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. Esto suele lograrse a través de mecanismos de anulación de duplicación la canalización de Dataflow. Sin embargo, BigQuery la suscripción solo admite al menos una entrega. Si la anulación de duplicación exacta se fundamental para tu caso de uso, considera los procesos descendentes BigQuery para manejar posibles duplicados.
Antes de comenzar
Antes de leer este documento, asegúrate de estar familiarizado con la siguiente información:
Cómo funciona Pub/Sub y los diferentes Condiciones de Pub/Sub.
Los diferentes tipos de suscripciones que admite Pub/Sub y por qué podrías usar un suscripción a BigQuery.
Cómo funciona BigQuery y cómo configurarlo y administrar tablas de BigQuery.
Flujo de trabajo de suscripción a BigQuery
En la siguiente imagen, se muestra el flujo de trabajo entre suscripción y BigQuery.
![Flujo de mensajes para una suscripción a BigQuery](https://cloud.google.com/static/pubsub/images/subscriber_bigquery.png?authuser=3&hl=es)
Esta es una breve descripción del flujo de trabajo que hace referencia a la Figura 1:
- Pub/Sub usa la función de escritura de almacenamiento de BigQuery para enviar datos a BigQuery desde una tabla de particiones.
- Los mensajes se envían por lotes a la tabla de BigQuery.
- Después de que una operación de escritura se completa correctamente, la API devuelve un OK respuesta.
- Si hay alguna falla en la operación de escritura, el El mensaje de Pub/Sub se confirma de forma negativa. El se vuelve a enviar el mensaje. Si el mensaje falla varias veces y se produce 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 determinar la tabla de BigQuery en la cual Pub/Sub escribe mensajes y el tipo de esquema de esa tabla.
Para obtener más información, consulta BigQuery propiedades.
Compatibilidad con el esquema
Pub/Sub y BigQuery usan diferentes formas de a definir sus esquemas. Los esquemas de Pub/Sub se definen en Apache Avro o búfer de protocolo mientras Los esquemas de BigQuery se definen con un variedad de formatos. La siguiente es una lista de información importante sobre la compatibilidad de esquema entre tema de Pub/Sub y una tabla de BigQuery.
Los mensajes que contienen un campo con un formato incorrecto no se escriben en en BigQuery.
En el esquema de BigQuery,
INT
,SMALLINT
,INTEGER
,BIGINT
,TINYINT
yBYTEINT
son alias deINTEGER
.DECIMAL
es un alias paraNUMERIC
; yBIGDECIMAL
es un alias paraBIGNUMERIC
.Cuando el tipo en el esquema del tema es
string
y el tipo en el La tabla de BigQuery esJSON
,TIMESTAMP
,DATETIME
,DATE
,TIME
,NUMERIC
oBIGNUMERIC
, o cualquier valor para este campo de una El mensaje de Pub/Sub debe cumplir con el formato especificado para el Datos de BigQuery tipo.Se admiten algunos tipos lógicos de Avro, como se especifica en la siguiente tabla. Los tipos lógicos que no están enumerados solo coinciden con el tipo de Avro equivalente que annotate, 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 las otras Type |
NULLABLE Type |
otros union |
No se puede 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 |
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 |
No se puede 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 hora o fecha, el número debe representan el valor correcto. A continuación, se muestra la asignación de los datos de BigQuery al número entero que los representa.
Tipo de datos de BigQuery | Representación de números enteros |
DATE |
La cantidad de días transcurridos desde la época Unix, 1 de enero de 1970 |
DATETIME |
La fecha y hora en microsegundos expresadas como hora civil con el CivilTimeEncoder |
TIME |
La hora en microsegundos expresada como hora civil con el CivilTimeEncoder |
TIMESTAMP |
La cantidad de microsegundos desde el tiempo Unix, 1 de enero de 1970, 00:00:00 UTC |
Captura de datos modificados en BigQuery
Las suscripciones a BigQuery admiten la captura de datos modificados (CDC)
actualizaciones cuando
use_topic_schema
o
use_table_schema
se configura como true
en las propiedades de suscripción. Para usar la función con
use_topic_schema
, establece el esquema del tema con el
siguiente campo:
_CHANGE_TYPE
(obligatorio): Es un campostring
configurado comoUPSERT
oDELETE
.Si un mensaje de Pub/Sub escrito en el La tabla de BigQuery tiene
_CHANGE_TYPE
establecido enUPSERT
, BigQuery actualiza la fila con la misma clave si si existe o inserta una nueva fila si no es así.Si un mensaje de Pub/Sub escrito en el La tabla de BigQuery tiene
_CHANGE_TYPE
establecido enDELETE
, BigQuery borra la fila de la tabla que contiene el valor la misma clave si existe.
Para usar la función con use_table_schema
, incluye el campo anterior en
el mensaje JSON.
Permisos de la cuenta de servicio de Pub/Sub
Para crear una suscripción a BigQuery, el directorio de Pub/Sub la cuenta de servicio debe tener permiso para escribir de BigQuery y leer los metadatos de la tabla. Para ver más consulta Asigna roles de BigQuery al Servicio de Pub/Sub .
Maneja los errores de los mensajes
Cuando no se puede escribir un mensaje de Pub/Sub
BigQuery, el mensaje no se puede confirmar. Para reenviar este tipo de
mensajes que no se puedan entregar, configura un mensaje no entregado
tema en la
suscripción a BigQuery. El mensaje de Pub/Sub
reenviado al tema de mensajes no entregados contiene un atributo
CloudPubSubDeadLetterSourceDeliveryErrorMessage
que tenga el motivo de que
No se pudo escribir el mensaje de Pub/Sub
en BigQuery.
Si Pub/Sub no puede escribir mensajes en BigQuery, Pub/Sub cancela la entrega de mensajes de manera similar a comportamiento de retirada de envío. Sin embargo, si el suscripción tiene un tema de mensajes no entregados adjunto Pub/Sub no retira la entrega cuando falla el mensaje se deben a errores de compatibilidad de esquemas.
Cuotas y límites
Hay limitaciones de cuota para el suscriptor de BigQuery de procesamiento por región. Para obtener más información, consulta Cuotas de Pub/Sub. y límites.
Las suscripciones a BigQuery escriben datos mediante API de BigQuery Storage Write. Para para obtener más información sobre las cuotas y los límites de la API de Storage Write, consulta API de BigQuery Storage Write solicitudes. BigQuery solo consumen la cuota de capacidad de procesamiento de la API de Storage Write. Tú puedes ignorar las otras consideraciones de cuota de la API de Storage Write en esta instancia.
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 BigQuery suscripción.
Solucionar problemas de BigQuery suscripción.
Lee sobre BigQuery.
Revisa los precios de Pub/Sub, lo que incluye Suscripciones a BigQuery.
Crea o modifica una suscripción con la CLI de
gcloud
comandos.Crear o modificar una suscripción con REST APIs.