Questo documento fornisce una panoramica di una sottoscrizione BigQuery, del relativo 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 non appena vengono ricevuti. 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, hai bisogno di una sottoscrizione pull o push e di un sottoscrittore (come Dataflow) che legge i messaggi e li scrive in una tabella BigQuery. Il sovraccarico di esecuzione di un job Dataflow non è necessario quando i messaggi non richiedono un'elaborazione aggiuntiva prima di essere archiviati in una tabella BigQuery. Puoi utilizzare un abbonamento BigQuery.
Per modifiche leggere ai messaggi, puoi allegare una trasformazione di messaggi singoli al tuo abbonamento BigQuery. Tuttavia, una pipeline Dataflow è consigliata per i sistemi Pub/Sub in cui è richiesta una trasformazione dei dati più complessa prima che i dati vengano archiviati in una tabella BigQuery, soprattutto se vuoi creare finestre o aggregare i messaggi.
Per scoprire come trasmettere dati in streaming da Pub/Sub a BigQuery con la trasformazione utilizzando Dataflow, consulta Trasmettere dati in streaming da Pub/Sub a BigQuery.
Il modello di sottoscrizione Pub/Sub a BigQuery di Dataflow applica la distribuzione esatta una sola volta per impostazione predefinita. Ciò si ottiene in genere tramite meccanismi di deduplicazione all'interno della pipeline Dataflow. Tuttavia, l'abbonamento BigQuery supporta solo la consegna "at-least-once". Se la deduplicazione esatta è fondamentale per il tuo caso d'uso, considera i processi downstream 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.
Workflow di sottoscrizione 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 BigQuery Storage Write (gRPC) per inviare dati alla tabella BigQuery.
- I messaggi vengono inviati in batch alla tabella BigQuery.
- Al termine di un'operazione di scrittura, l'API restituisce una risposta OK.
- Se si verificano errori nell'operazione di scrittura, il messaggio Pub/Sub stesso viene riconosciuto negativamente. Il messaggio viene quindi inviato di nuovo. Se il messaggio non viene recapitato un numero sufficiente di volte e nella sottoscrizione è configurato un argomento messaggi non recapitabili, il messaggio viene spostato nell'argomento messaggi non recapitabili.
Proprietà di una sottoscrizione BigQuery
Le proprietà che configuri per un abbonamento a BigQuery determinano la tabella BigQuery in cui Pub/Sub scrive i messaggi e il tipo di schema di quella tabella.
Per ulteriori informazioni, vedi Proprietà BigQuery.
Compatibilità dello schema
Questa sezione è applicabile solo se selezioni l'opzione Utilizza schema argomento quando crei una sottoscrizione BigQuery.
Pub/Sub e BigQuery utilizzano modi 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 di informazioni importanti sulla compatibilità dello schema tra un argomento Pub/Sub e una tabella BigQuery.
Qualsiasi messaggio che contiene un campo formattato in modo errato non viene scritto in BigQuery.
Nello schema BigQuery,
INT,SMALLINT,INTEGER,BIGINT,TINYINTeBYTEINTsono alias diINTEGER;DECIMALè un alias diNUMERICeBIGDECIMALè un alias diBIGNUMERIC.Quando il tipo nello schema dell'argomento è
stringe il tipo nella tabella BigQuery èJSON,TIMESTAMP,DATETIME,DATE,TIME,NUMERICoBIGNUMERIC, qualsiasi valore per questo campo in un messaggio Pub/Sub deve rispettare il formato specificato per il tipo di dati BigQuery.Sono supportati alcuni tipi logici Avro, come specificato nella tabella seguente. Tutti i tipi logici non elencati corrispondono solo al tipo Avro equivalente che annotano, come descritto in dettaglio nella specifica Avro.
Di seguito è riportata una raccolta di mappature di diversi formati di schema ai tipi di dati BigQuery.
Tipi Avro
| Tipo di 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 null e l'altro 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 |
timestamp-millis |
TIMESTAMP |
date |
DATE |
time-micros |
TIME |
time-millis |
TIME |
duration |
INTERVAL |
decimal |
NUMERIC o BIGNUMERIC |
Tipi di buffer di protocollo
| Tipo di buffer di protocollo | Tipo di dati 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 |