Carica i dati in batch utilizzando l'API Storage Write (gRPC)
L'API BigQuery Storage Write (gRPC) consente di caricare i record in batch in BigQuery ed eseguirne il commit come singola transazione atomica. Scrivendo in stream di tipo in attesa, puoi memorizzare nel buffer i record tra worker paralleli e rendere il batch visibile alle query solo dopo che tutti gli stream sono stati eseguiti correttamente. Per eseguire caricamenti batch senza scrivere codice API personalizzato, puoi utilizzare il connettore Apache Spark SQL per BigQuery con Managed Service for Apache Spark.
Panoramica dell'architettura
L'API Storage Write (gRPC) è adatta a un'architettura di pipeline di dati. Un processo principale crea un numero 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 hanno segnalato il completamento dell'operazione al processo principale, quest'ultimo esegue il commit dei dati. Se un worker non va a buon fine, la parte di dati assegnata non verrà visualizzata nei risultati finali e l'intero worker può essere riprovato in sicurezza. In una pipeline più sofisticata, i worker eseguono il checkpoint dei loro progressi segnalando l'ultimo offset scritto al processo principale. Questo approccio può dare vita a una pipeline solida e resiliente agli errori.
Carica i 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 in 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 saperne di più sul modello di erroregoogle.rpc.Status, consulta 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 nel campostream_errorsdiBatchCommitWriteStreamsResponse.
Il commit è un'operazione atomica e puoi eseguire il commit di più stream contemporaneamente. Un commit di uno stream può essere eseguito 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 sono visibili alle letture.
Dopo la finalizzazione dello stream e prima del commit, i dati possono rimanere nel buffer per un massimo di 4 ore. I flussi in attesa devono essere sottoposti a commit entro 24 ore. Esiste un limite di quota per la dimensione totale 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 saperne di più, 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.
Prima di eseguire gli esempi di codice, imposta la variabile di ambiente
GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.
Vai
Per scoprire come installare e utilizzare la libreria client per BigQuery, consulta Librerie client di BigQuery. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Go.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Prima di eseguire gli esempi di codice, imposta la variabile di ambiente
GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.
Java
Per scoprire come installare e utilizzare la libreria client per BigQuery, consulta Librerie client di BigQuery. Per saperne di più, 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.
Prima di eseguire gli esempi di codice, imposta la variabile di ambiente
GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.
Node.js
Per scoprire come installare e utilizzare la libreria client per BigQuery, consulta Librerie client di BigQuery. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Node.js.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Prima di eseguire gli esempi di codice, imposta la variabile di ambiente
GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.
Python
Questo esempio mostra un record semplice con due campi. Per un esempio più lungo che mostra come inviare tipi di dati diversi, 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 saperne di più, 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.
Prima di eseguire gli esempi di codice, imposta la variabile di ambiente
GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.
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.