Abbonamenti BigQuery

Questo documento fornisce una panoramica di una sottoscrizione BigQuery, del flusso di lavoro e delle proprietà associate.

Una sottoscrizione BigQuery è un tipo di sottoscrizione per l'esportazione che scrive i messaggi in una tabella BigQuery esistente quando 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 abbonamento a BigQuery.

Senza il tipo di sottoscrizione BigQuery, devi avere una sottoscrizione pull o push e un sottoscrittore (come Dataflow) che legge i messaggi e li scrive 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 consigliata una pipeline Dataflow Sistemi Pub/Sub in cui è richiesta una certa trasformazione dei dati prima vengono 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 di Dataflow applica la distribuzione "exactly-once" entro il giorno predefinito. Ciò si ottiene in genere mediante meccanismi di deduplicazione all'interno la pipeline Dataflow. Tuttavia, BigQuery abbonamento supporta solo la consegna "at-least-once". Se la deduplicazione esatta viene fondamentale per il tuo caso d'uso, considera i processi downstream BigQuery per gestire i potenziali duplicati.

Prima di iniziare

Prima di leggere questo documento, assicurati di acquisire familiarità con quanto segue:

  • Come funziona Pub/Sub e le diverse di Pub/Sub.

  • I diversi tipi di abbonamenti supportato da Pub/Sub e i motivi per cui potresti voler utilizzare abbonamento a BigQuery.

  • Come funziona BigQuery e come configurarlo e gestire le tabelle BigQuery.

Flusso di lavoro della sottoscrizione BigQuery

L'immagine seguente mostra il flusso di lavoro tra un ambiente BigQuery abbonamento a BigQuery e BigQuery.

Flusso di messaggi per una sottoscrizione BigQuery
Figura 1. Flusso di lavoro per una sottoscrizione BigQuery
.

Ecco una breve descrizione del flusso di lavoro che fa riferimento alla Figura 1:

  1. Pub/Sub utilizza la funzionalità di scrittura dello spazio di archiviazione BigQuery API per inviare dati a BigQuery .
  2. I messaggi vengono inviati in batch alla tabella BigQuery.
  3. Dopo il completamento di un'operazione di scrittura, l'API restituisce un risposta.
  4. In caso di errori durante l'operazione di scrittura, Il messaggio Pub/Sub stesso viene confermato negativamente. La il messaggio viene inviato di nuovo. Se il messaggio non funziona abbastanza 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

Pub/Sub e BigQuery usano diversi modi per ne definiscono gli schemi. Gli schemi Pub/Sub sono definiti in Apache Avro o Protocol Buffer mentre Gli schemi BigQuery vengono definiti utilizzando vari formati. Di seguito è riportato un elenco informazioni importanti sulla compatibilità dello schema tra un argomento Pub/Sub e una tabella BigQuery.

  • I messaggi che contengono un campo non correttamente formattato non verranno scritti in in BigQuery.

  • Nello schema BigQuery, INT, SMALLINT, INTEGER, BIGINT, TINYINT e BYTEINT sono alias per INTEGER; DECIMAL è un alias di NUMERIC; mentre BIGDECIMAL è un alias di BIGNUMERIC.

  • Quando il tipo nello schema dell'argomento è string e il tipo nello schema La tabella BigQuery è JSON, TIMESTAMP, DATETIME, DATE, TIME, NUMERIC o BIGNUMERIC, 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 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 che è null e gli altri 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 di 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 oppure DATE
uint64 NUMERIC o BIGNUMERIC
sint32 INTEGER, NUMERIC o BIGNUMERIC
sint64 INTEGER, NUMERIC, BIGNUMERIC DATE DATETIME o TIMESTAMP
fixed32 INTEGER, NUMERIC, BIGNUMERIC oppure DATE
fixed64 NUMERIC o BIGNUMERIC
sfixed32 INTEGER, NUMERIC, BIGNUMERIC oppure 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 dai dati BigQuery tipi al numero intero che li rappresenta.

Tipo di dati BigQuery Rappresentazione dei 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 Il tempo in microsecondi espresso come ora civile utilizzando la 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 campo seguente:

  • _CHANGE_TYPE (obbligatorio): un campo string impostato su UPSERT o DELETE.

    • Se un messaggio Pub/Sub viene scritto La tabella BigQuery ha _CHANGE_TYPE impostato su UPSERT, BigQuery aggiorna la riga con la stessa chiave se esiste o inserisce una nuova riga in caso contrario.

    • Se un messaggio Pub/Sub viene scritto La tabella BigQuery ha _CHANGE_TYPE impostato su DELETE, BigQuery elimina la riga nella tabella con la stessa chiave, se esistente.

Per utilizzare la funzionalità con use_table_schema, includi il campo precedente in il messaggio JSON.

Autorizzazioni dell'account di servizio Pub/Sub

Per creare una sottoscrizione BigQuery, il comando Pub/Sub l'account di servizio deve disporre dell'autorizzazione per scrivere nell'account dalla tabella BigQuery e leggere i metadati della tabella. Per ulteriori informazioni informazioni, consulta Assegnare i ruoli BigQuery Servizio Pub/Sub Google Cloud.

Gestire gli errori relativi ai messaggi

Quando non è possibile scrivere un messaggio Pub/Sub BigQuery, il messaggio non può essere confermato. Per inoltrare tale messaggi non recapitabili, configura un messaggio non recapitabile nella sezione abbonamento a BigQuery. Il messaggio Pub/Sub inoltrato all'argomento messaggi non recapitabili contiene un attributo CloudPubSubDeadLetterSourceDeliveryErrorMessage che è il motivo per cui Impossibile scrivere il messaggio Pub/Sub in BigQuery.

Se Pub/Sub non può scrivere messaggi in BigQuery, Pub/Sub si oppone alla consegna dei messaggi in modo simile comportamenti di backoff push. Tuttavia, se ha un abbonamento argomento messaggi non recapitabili allegato Pub/Sub non annulla la consegna quando i 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 pagina relativa alle quote di Pub/Sub e limiti.

Le sottoscrizioni BigQuery scrivono dati utilizzando API BigQuery StorageWrite. Per informazioni su quote e limiti per l'API StorageWrite, consulta API BigQuery Storage Scrivi richieste. BigQuery le sottoscrizioni consumano solo la quota di velocità effettiva per l'API StorageWrite. Tu puoi ignorare le altre considerazioni sulla quota dell'API StorageWrite in questa istanza.

Prezzi

Per i prezzi delle sottoscrizioni BigQuery, consulta dei prezzi di Pub/Sub.

Passaggi successivi