Daten im Batch mit der Storage Write API laden
In diesem Dokument wird beschrieben, wie Sie mit der BigQuery Storage Write API Daten im Batch in BigQuery laden.
In Szenarien mit Batchladevorgängen schreibt eine Anwendung Daten und übergibt sie per Commit in einer einzigen unteilbaren Transaktion. Wenn Sie die Storage Write API für das Laden von Daten im Batch verwenden, erstellen Sie einen oder mehrere Streams vom Typ „Ausstehend“. Der Typ „Ausstehend“ unterstützt Transaktionen auf Streamebene. Datensätze werden im Status "Ausstehend" zwischengespeichert, bis Sie den Stream per Commit übergeben.
Prüfen Sie bei Batcharbeitslasten auch die Verwendung der Storage Write API über den Apache Spark SQL Connector für BigQuery mithilfe von Dataproc, anstatt benutzerdefinierten Storage Write API-Code zu schreiben.
Die Storage Write API 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
CreateWriteStream
auf, um einen oder mehrere Streams vom Typ „Ausstehend“ zu erstellen. - Rufen Sie für jeden Stream
AppendRows
in einer Schleife auf, um Datensätze in Batches zu schreiben. - Rufen Sie für jeden Stream
FinalizeWriteStream
auf. Nach dem Aufrufen dieser Methode können Sie keine weiteren Zeilen in den Stream schreiben. Wenn SieAppendRows
nach dem Aufruf vonFinalizeWriteStream
aufrufen, wird einStorageError
mitStorageErrorCode.STREAM_FINALIZED
im Fehlergoogle.rpc.Status
zurückgegeben. Weitere Informationen zum Fehlermodellgoogle.rpc.Status
finden Sie unter Fehler. - Rufen Sie
BatchCommitWriteStreams
auf, 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_errors
derBatchCommitWriteStreamsResponse
zurü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.