Caricare dati in batch utilizzando l'API Storage Write
Questo documento descrive come utilizzare l' API BigQuery Storage Write per caricare dati in batch in BigQuery.
Negli scenari di caricamento in batch, un'applicazione scrive i dati ed esegue il commit come singola transazione atomica. Quando utilizzi l'API Storage Write per caricare dati in batch, crea uno o più stream di 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 esegui il commit dello 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 dell'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 batch. Ogni worker crea una connessione al proprio stream, scrive i dati e finalizza lo stream al termine. Dopo che tutti i worker segnalano il completamento riuscito al processo principale, quest'ultimo esegue il commit dei dati. Se un worker non riesce, la parte di dati assegnata non verrà visualizzata nei risultati finali e l'intero worker può essere ritentato in sicurezza. In una pipeline più sofisticata, i worker eseguono il checkpoint dei progressi segnalando l'ultimo offset scritto al processo principale. Questo approccio può portare a una pipeline robusta e resiliente agli errori.
Caricare dati in batch utilizzando il tipo in attesa
Per utilizzare il tipo in attesa, l'applicazione esegue le seguenti operazioni:
- Chiama
CreateWriteStreamper creare uno o più stream di tipo in attesa. - Per ogni stream, chiama
AppendRowsin un loop per scrivere batch di record. - Per ogni stream, chiama
FinalizeWriteStream. Dopo aver chiamato questo metodo, non puoi scrivere altre righe nello stream. Se chiamiAppendRowsdopo aver chiamatoFinalizeWriteStream, viene restituito unStorageErrorconStorageErrorCode.STREAM_FINALIZEDnell'erroregoogle.rpc.Status. Per ulteriori informazioni sul modello di erroregoogle.rpc.Status, consulta la sezione Errori. - Chiama
BatchCommitWriteStreamsper eseguire il commit degli stream. Dopo aver chiamato questo metodo, i dati diventano disponibili per la lettura. Se si verifica un errore durante il commit di uno degli stream, l'errore viene restituito nelstream_errorscampo diBatchCommitWriteStreamsResponse.
Il 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, è sicuro riprovare. Finché non esegui il commit di uno stream, i dati sono in attesa e non visibili per le letture.
Dopo la finalizzazione dello stream e prima del commit, i dati possono rimanere nel buffer per un massimo di 4 ore. È necessario eseguire il commit degli stream in attesa 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 di 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 eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura 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 Go BigQuery.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura 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 eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura 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 Node.jsBigQuery.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura 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 eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura 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, esegui
protoc --python_out=. customer_record.proto, dove protoc è il
compilatore del buffer di protocollo. Il file customer_record.proto definisce il formato dei messaggi utilizzati nell'esempio Python.