Carica i dati in batch utilizzando l'API Storage Write
Questo documento descrive come utilizzare l'API BigQuery Storage Write per caricare in batch i dati in BigQuery.
Negli scenari di caricamento collettivo, un'applicazione scrive i dati e li esegue come singola transazione atomica. Quando utilizzi l'API Storage Write per caricare i dati in batch, crea uno o più stream con tipo in attesa. Il tipo In attesa supporta le transazioni a livello di stream. I record vengono memorizzati in un buffer in stato di attesa finché non committi lo stream.
Per i carichi di lavoro batch, valuta anche la possibilità di utilizzare l'API Storage Write tramite il connettore Apache Spark SQL per BigQuery utilizzando Dataproc, anziché scrivere codice personalizzato per l'API Storage Write.
L'API Storage Write è adatta a un'architettura di pipeline di dati. Un processo principale crea una serie di stream. Per ogni stream, assegna un thread di lavoro o un processo separato per scrivere una parte dei dati del batch. Ogni worker crea una connessione al proprio stream, scrive i dati e completa lo stream al termine. Dopo che tutti i worker segnalano il completamento al processo principale, il processo principale esegue il commit dei dati. Se un worker non riesce, la parte assegnata dei dati non viene visualizzata nei risultati finali e l'intero worker può essere riavviato in sicurezza. In una pipeline più sofisticata, i worker controllano il proprio avanzamento segnalando l'ultimo offset scritto nel processo principale. Questo approccio può generare una pipeline solida e resiliente ai guasti.
Carica i dati in batch utilizzando il tipo in attesa
Per utilizzare il tipo in attesa, l'applicazione esegue le seguenti operazioni:
- Chiama
CreateWriteStream
per creare uno o più stream di tipo in attesa. - Per ogni stream, chiama
AppendRows
in un ciclo per scrivere batch di record. - Per ogni stream, chiama
FinalizeWriteStream
. Dopo aver chiamato questo metodo, non puoi scrivere altre righe nello stream. Se chiamiAppendRows
dopo aver chiamatoFinalizeWriteStream
, viene restituito unStorageError
conStorageErrorCode.STREAM_FINALIZED
nell'erroregoogle.rpc.Status
. Per ulteriori informazioni sul modello di erroregoogle.rpc.Status
, consulta Errori. - Chiama
BatchCommitWriteStreams
per eseguire il commit degli stream. Dopo aver chiamato questo metodo, i dati diventano disponibili per la lettura. Se si verifica un errore durante l'esecuzione del commit di uno degli stream, l'errore viene restituito nel campostream_errors
delBatchCommitWriteStreamsResponse
.
L'commit è un'operazione atomica e puoi eseguire il commit di più stream contemporaneamente. È possibile eseguire il commit di uno stream una sola volta, quindi se l'operazione di commit non va a buon fine, puoi tranquillamente riprovare. Fino a quando non esegui il commit di uno stream, i dati sono in attesa e non visibili alle letture.
Una volta completato lo stream e prima che venga eseguito il commit, i dati possono rimanere nel buffer per un massimo di 4 ore. Gli stream in attesa devono essere confermati entro 24 ore. Esiste un limite di quota per le dimensioni totali del buffer dello stream in attesa.
Il seguente codice mostra come scrivere i dati nel tipo in attesa:
C#
Per scoprire come installare e utilizzare la libreria client per BigQuery, consulta Librerie client di BigQuery. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery C#.
Per autenticarti in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.
Vai
Per scoprire come installare e utilizzare la libreria client per BigQuery, consulta Librerie client di BigQuery. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Go.
Per autenticarti in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.
Java
Per scoprire come installare e utilizzare la libreria client per BigQuery, consulta Librerie client di BigQuery. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Java.
Per autenticarti in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.
Node.js
Per scoprire come installare e utilizzare la libreria client per BigQuery, consulta Librerie client di BigQuery. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Node.js.
Per autenticarti in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.
Python
Questo esempio mostra un record semplice con due campi. Per un esempio più lungo che mostra come inviare diversi tipi di dati, inclusi i tipi STRUCT
, consulta l'esempio append_rows_proto2 su GitHub.
Per scoprire come installare e utilizzare la libreria client per BigQuery, consulta Librerie client di BigQuery. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Python.
Per autenticarti in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.
Questo esempio di codice dipende da un modulo di protocollo compilato,
customer_record_pb2.py
. Per creare il modulo compilato, eseguiprotoc --python_out=. customer_record.proto
, dove protoc
è il compilatore del buffer del protocollo. Il file customer_record.proto
definisce il formato
dei messaggi utilizzati nell'esempio Python.