Questo documento fornisce una panoramica di una sottoscrizione BigQuery, del flusso di lavoro e delle proprietà associate.
Una sottoscrizione BigQuery è un tipo di sottoscrizione dell'esportazione che scrive i messaggi in una tabella BigQuery esistente alla ricezione. Non è necessario configurare un client sottoscrittore separato. Utilizza la console Google Cloud, Google Cloud CLI, le librerie client o l'API Pub/Sub per creare, aggiornare, elencare, scollegare o eliminare una sottoscrizione BigQuery.
Senza il tipo di sottoscrizione BigQuery, è necessaria una sottoscrizione pull o push e un sottoscrittore (ad esempio Dataflow) che legga i messaggi e li scriva in una tabella BigQuery. L'overhead associato all'esecuzione di Il job Dataflow non è necessario quando i messaggi non richiedono ulteriori elaborazioni prima di archiviarle in una tabella BigQuery; puoi usare una sottoscrizione BigQuery.
Tuttavia, è comunque consigliabile una pipeline Dataflow per i sistemi Pub/Sub in cui è richiesta una certa trasformazione dei dati prima che vengano archiviati in una tabella BigQuery. Per scoprire come trasmettere in streaming da Pub/Sub a BigQuery con trasformazione utilizzando Dataflow, vedi Flusso di dati da Pub/Sub BigQuery.
La sottoscrizione Pub/Sub al modello BigQuery da Dataflow applica la distribuzione "exactly-once" entro il giorno predefinito. In genere, questo viene ottenuto tramite meccanismi di deduplica all'interno della pipeline Dataflow. Tuttavia, l'abbonamento BigQuery supporta solo la consegna almeno una volta. Se la deduplica esatta è critica per il tuo caso d'uso, valuta le procedure a valle in BigQuery per gestire i potenziali duplicati.
Prima di iniziare
Prima di leggere questo documento, assicurati di conoscere quanto segue:
Come funziona Pub/Sub e i diversi termini di Pub/Sub.
I diversi tipi di sottoscrizioni supportati da Pub/Sub e perché potresti voler utilizzare una sottoscrizione BigQuery.
Come funziona BigQuery e come configurare e gestire le tabelle BigQuery.
Flusso di lavoro delle sottoscrizioni BigQuery
L'immagine seguente mostra il flusso di lavoro tra un abbonamento BigQuery e BigQuery.
Ecco una breve descrizione del flusso di lavoro che fa riferimento alla Figura 1:
- Pub/Sub utilizza l'API di scrittura dello spazio di archiviazione BigQuery per inviare i dati alla tabella BigQuery.
- I messaggi vengono inviati in batch alla tabella BigQuery.
- Dopo il completamento di un'operazione di scrittura, l'API restituisce un risposta.
- In caso di errori durante l'operazione di scrittura, Il messaggio Pub/Sub stesso viene confermato negativamente. Il messaggio viene poi inviato di nuovo. Se il messaggio restituisce un numero sufficiente di volte e per l'argomento messaggi non recapitabili configurato nella sottoscrizione, il messaggio viene spostato all'argomento messaggi non recapitabili.
Proprietà di una sottoscrizione BigQuery
Le proprietà che configuri per una sottoscrizione BigQuery Determinare la tabella BigQuery a cui inviare Pub/Sub. scrive i messaggi e il tipo di schema di quella tabella.
Per ulteriori informazioni, consulta BigQuery proprietà.
Compatibilità schema
Questa sezione è applicabile solo se selezioni l'opzione Utilizza schema argomento quando crei una sottoscrizione BigQuery.
Pub/Sub e BigQuery utilizzano metodi diversi per definire i propri schemi. Gli schemi Pub/Sub sono definiti in formato Apache Avro o Protocol Buffer, mentre gli schemi BigQuery sono definiti utilizzando una varietà di formati.
Di seguito è riportato un elenco informazioni importanti sulla compatibilità dello schema tra un argomento Pub/Sub e una tabella BigQuery.
Qualsiasi messaggio contenente un campo con formato non corretto non viene scritto in BigQuery.
Nello schema BigQuery,
INT
,SMALLINT
,INTEGER
,BIGINT
,TINYINT
eBYTEINT
sono alias perINTEGER
;DECIMAL
è un alias perNUMERIC
eBIGDECIMAL
è un alias perBIGNUMERIC
.Quando il tipo nello schema dell'argomento è
string
e il tipo nello schema La tabella BigQuery èJSON
,TIMESTAMP
,DATETIME
,DATE
,TIME
,NUMERIC
oBIGNUMERIC
, quindi qualsiasi valore di questo campo in una Il messaggio Pub/Sub deve rispettare il formato specificato per Dati BigQuery tipo.Sono supportati alcuni tipi logici Avro, come specificato nella tabella seguente. Tutti i tipi logici non elencati corrispondono solo al tipo Avro equivalente che annotare, come descritto nelle specifiche di Avro.
Di seguito è riportata una raccolta di mappatura di diversi formati di schema a Tipi di dati di BigQuery.
Tipi di Avro
Tipo Avro | Tipo di dati 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 di Type |
REPEATED Type |
map con tipo di valore ValueType
|
REPEATED STRUCT <key STRING, value
ValueType> |
union con due tipi, uno corrispondente a
null e l'altro a Type |
NULLABLE Type |
altri union |
Non mappabile |
fixed |
BYTES , NUMERIC o
BIGNUMERIC |
enum |
INTEGER |
Tipi logici Avro
Tipo logico Avro | Tipo di dati BigQuery |
timestamp-micros |
TIMESTAMP |
date |
DATE |
time-micros |
TIME |
duration |
INTERVAL |
decimal |
NUMERIC o BIGNUMERIC |
Tipi di buffer di protocollo
Tipo di buffer del protocollo | Tipo di dati BigQuery |
double |
FLOAT64 , NUMERIC o
BIGNUMERIC |
float |
FLOAT64 , NUMERIC o
BIGNUMERIC |
int32 |
INTEGER , NUMERIC ,
BIGNUMERIC oppure 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 |
Non mappabile |
map<KeyType, ValueType> |
REPEATED RECORD<key KeyType, value
ValueType> |
enum |
INTEGER |
repeated/array of Type |
REPEATED Type |
Rappresentazione del numero intero per data e ora
Quando si esegue la mappatura da un numero intero a uno dei tipi di data o ora, il numero deve rappresentano il valore corretto. Di seguito è riportata la mappatura dei tipi di dati BigQuery all'intero che li rappresenta.
Tipo di dati BigQuery | Rappresentazione di numeri interi |
DATE |
Il numero di giorni dall'epoca di Unix, 1° gennaio 1970 |
DATETIME |
La data e l'ora in microsecondi espressi come ora civile utilizzando CivilTimeEncoder |
TIME |
L'ora in microsecondi espressa come ora civile utilizzando CivilTimeEncoder |
TIMESTAMP |
Il numero di microsecondi dall'epoca di Unix, 1° gennaio 1970 00:00:00 UTC |
Change Data Capture (CDC) di BigQuery
Le sottoscrizioni BigQuery supportano CDC (Change Data Capture)
vengono aggiornati quando
use_topic_schema
oppure
use_table_schema
sia impostato su true
nelle proprietà dell'abbonamento. Per utilizzare la funzionalità con
use_topic_schema
, imposta lo schema dell'argomento con
seguenti campi:
_CHANGE_TYPE
(obbligatorio): un campostring
impostato suUPSERT
oDELETE
.Se un messaggio Pub/Sub viene scritto La tabella BigQuery ha
_CHANGE_TYPE
impostato suUPSERT
, BigQuery aggiorna la riga con la stessa chiave se esiste o inserisce una nuova riga in caso contrario.Se un messaggio Pub/Sub scritto nella tabella BigQuery ha
_CHANGE_TYPE
impostato suDELETE
, BigQuery elimina la riga nella tabella con la stessa chiave, se esistente.
_CHANGE_SEQUENCE_NUMBER
(facoltativo): un campoint64
(long
) oint32
(int
) impostato per garantire che gli aggiornamenti e le eliminazioni apportati alla tabella BigQuery vengano elaborati in ordine. Messaggi per la stessa chiave di riga deve contenere un valore crescente in modo monotonico per_CHANGE_SEQUENCE_NUMBER
. Messaggi con numeri di sequenza sono minori del numero di sequenza più alto elaborato per una riga non avranno alcun effetto sulla riga della tabella BigQuery. Nota che Pub/Sub richiede un valore basato su numeri interi anziché Il valore basato su stringhe utilizzato durante l'interazione con BigQuery .
Per utilizzare la funzionalità con use_table_schema
, includi i campi precedenti in
il messaggio JSON.
Autorizzazioni dell'account di servizio Pub/Sub
Per creare una sottoscrizione BigQuery, l'account di servizio Pub/Sub deve disporre dell'autorizzazione per scrivere nella tabella BigQuery specifica e leggere i metadati della tabella. Per ulteriori informazioni, consulta Assegnare i ruoli BigQuery all'account del servizio Pub/Sub.
Gestire gli errori relativi ai messaggi
Quando non è possibile scrivere un messaggio Pub/Sub in
BigQuery, il messaggio non può essere confermato. Per inoltrare questi messaggi non recapitabili, configura un argomento messaggi non recapitabili nell'abbonamento BigQuery. Il messaggio Pub/Sub forwardato all'argomento messaggi non recapitabili contiene un attributoCloudPubSubDeadLetterSourceDeliveryErrorMessage
che indica il motivo per cui non è stato possibile scrivere il messaggio Pub/Sub in BigQuery.
Se Pub/Sub non riesce a scrivere i messaggi in BigQuery, ritira la consegna dei messaggi in modo simile al comportamento di backoff push. Tuttavia, se alla sostiscrizione è associato un argomento messaggi non recapitabili, Pub/Sub non esegue il ritiro della consegna quando gli errori dei messaggi sono dovuti a errori di compatibilità dello schema.
Quote e limiti
Sono presenti limitazioni di quota per il sottoscrittore BigQuery per regione. Per ulteriori informazioni, consulta la sezione sulle quote di Pub/Sub e limiti.
Le iscrizioni BigQuery scrivono i dati utilizzando l' API BigQuery Storage Write. Per informazioni su quote e limiti per l'API Storage Write, consulta le richieste dell'API BigQuery Storage Write. BigQuery le sottoscrizioni consumano solo la quota di velocità effettiva per l'API StorageWrite. In questo caso, puoi ignorare le altre considerazioni relative alla quota dell'API Storage Write.
Prezzi
Per i prezzi delle sottoscrizioni BigQuery, consulta la pagina dei prezzi di Pub/Sub.
Passaggi successivi
Crea una sottoscrizione, ad esempio una sottoscrizione BigQuery.
Risolvi i problemi relativi a un abbonamento BigQuery.
Scopri di più su BigQuery.
Esamina i prezzi di Pub/Sub, incluse le sottoscrizioni BigQuery.
Crea o modifica un abbonamento con l'interfaccia a riga di comando di
gcloud
comandi vocali.Creare o modificare una sottoscrizione con REST per le API.