Daten im Batch mit der Storage Write API (gRPC) laden
Mit der BigQuery Storage Write API (gRPC) können Sie Datensätze im Batch in BigQuery laden und als einzelne atomare Transaktion per Commit übergeben. Wenn Sie in Streams vom Typ „Ausstehend“ schreiben, können Sie Datensätze über parallele Worker hinweg zwischenspeichern und den Batch erst dann für Abfragen sichtbar machen, wenn alle Streams erfolgreich sind. Wenn Sie Batch-Ladevorgänge ausführen möchten, ohne benutzerdefinierten API-Code zu schreiben, können Sie den Apache Spark SQL-Connector für BigQuery mit Managed Service for Apache Spark verwenden.
Architekturübersicht
Die Storage Write API (gRPC) eignet sich gut für eine Datenpipeline-Architektur. Ein Hauptprozess erzeugt eine Reihe von Streams. Jedem Stream wird ein Worker-Thread oder ein separater Prozess zugewiesen, um einen Teil der Batch-Daten zu schreiben. Jeder Worker erstellt eine Verbindung zu seinem Stream, schreibt Daten und finalisiert seinen Stream, wenn er abgeschlossen ist. Nachdem alle Worker den erfolgreichen Abschluss zum Hauptprozess signalisiert haben, übergibt der Hauptprozess die Daten per Commit. Wenn ein Worker fehlschlägt, wird der zugewiesene Teil der Daten nicht in den Endergebnissen angezeigt und der gesamte Worker kann wiederholt werden. In einer komplexeren Pipeline prüfen Worker ihren Fortschritt, indem sie den letzten an den Hauptprozess geschriebenen Offset melden. Dieser Ansatz kann zu einer robusten Pipeline führen, die ausfallsicher ist.
Daten im Batch unter Verwendung des Typs „Ausstehend“ laden
Die Anwendung geht so vor, um den Typ „Ausstehend“ zu verwenden:
- Rufen Sie
CreateWriteStreamauf, um einen oder mehrere Streams vom Typ „Ausstehend“ zu erstellen. - Rufen Sie für jeden Stream
AppendRowsin einer Schleife auf, um Datensätze in Batches zu schreiben. - Rufen Sie für jeden Stream
FinalizeWriteStreamauf. Nach dem Aufrufen dieser Methode können Sie keine weiteren Zeilen in den Stream schreiben. Wenn SieAppendRowsnach dem Aufruf vonFinalizeWriteStreamaufrufen, wird einStorageErrormitStorageErrorCode.STREAM_FINALIZEDim Fehlergoogle.rpc.Statuszurückgegeben. Weitere Informationen zum Fehlermodellgoogle.rpc.Statusfinden Sie unter Fehler. - Rufen Sie
BatchCommitWriteStreamsauf, um die Streams per Commit zu übergeben. Nach dem Aufrufen dieser Methode stehen die Daten zum Lesen zur Verfügung. Wenn beim Commit eines der Streams ein Fehler auftritt, wird der Fehler im Feldstream_errorsderBatchCommitWriteStreamsResponsezurückgegeben.
Das Commit ist ein unteilbarer Vorgang und Sie können mehrere Streams gleichzeitig per Commit übergeben. Für einen Stream kann nur einmal ein Commit durchgeführt werden. Wenn der Commit-Vorgang fehlschlägt, kann der Vorgang sicher wiederholt werden. Bis zum Commit eines Streams stehen die Daten aus und sind für Lesevorgänge nicht sichtbar.
Nachdem der Stream abgeschlossen wurde und bevor er übergeben wird, können die Daten bis zu 4 Stunden im Puffer verbleiben. Ausstehende Streams müssen innerhalb von 24 Stunden per Commit bestätigt werden. Für die Gesamtgröße des Zwischenspeichers für ausstehende Streams gilt ein Kontingentlimit.
Der folgende Code zeigt, wie Daten vom Typ „Ausstehend“ geschrieben werden.
C#
Informationen zum Installieren und Verwenden der Clientbibliothek für BigQuery finden Sie unter BigQuery-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur BigQuery C# API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Go
Informationen zum Installieren und Verwenden der Clientbibliothek für BigQuery finden Sie unter BigQuery-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur BigQuery Go API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Java
Informationen zum Installieren und Verwenden der Clientbibliothek für BigQuery finden Sie unter BigQuery-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur BigQuery Java API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Node.js
Informationen zum Installieren und Verwenden der Clientbibliothek für BigQuery finden Sie unter BigQuery-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur BigQuery Node.js API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Python
Dieses Beispiel zeigt einen einfachen Datensatz mit zwei Feldern. Ein längeres Beispiel, das zeigt, wie Sie verschiedene Datentypen einschließlich STRUCT-Typen senden, finden Sie im append_rows_proto2-Beispiel auf GitHub.
Informationen zum Installieren und Verwenden der Clientbibliothek für BigQuery finden Sie unter BigQuery-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur BigQuery Python API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Dieses Codebeispiel hängt vom kompilierten Protokollmodul customer_record_pb2.py ab. Führen Sie zum Erstellen des kompilierten Moduls protoc --python_out=. customer_record.proto aus, wobei protoc der Protokollzwischenspeicher-Compiler ist. Die Datei customer_record.proto definiert das Format der im Python-Beispiel verwendeten Nachrichten.