Daten als Protobuf-Spalten exportieren
In diesem Dokument wird beschrieben, wie Sie BigQuery-Daten als Protokollpufferspalten (Protobuf) mit benutzerdefinierten BigQuery-Funktionen (UDFs) exportieren können.
Wann werden Protobuf-Spalten verwendet?
BigQuery bietet eine Reihe von integrierten Funktionen zum Formatieren ausgewählter Daten. Eine Möglichkeit besteht darin, mehrere Spaltenwerte in einem einzigen Protobuf-Wert zusammenzuführen. Dies hat folgende Vorteile:
- Sicherheit des Objekttyps.
- Verbesserte Komprimierung, Datenübertragungszeit und Kosten im Vergleich zu JSON.
- Flexibilität, da die meisten Programmiersprachen Bibliotheken für die Verarbeitung von Protobuf haben.
- Weniger Aufwand beim Lesen aus mehreren Spalten und Erstellen eines einzelnen Objekts.
Andere Spaltentypen können auch Typensicherheit bieten. Bei Verwendung von Protobuf-Spalten steht jedoch ein vollständig typisiertes Objekt zur Verfügung, wodurch der Arbeitsaufwand für die Anwendungsebene oder einen anderen Teil der Pipeline reduziert werden kann.
Es gibt jedoch Einschränkungen beim Exportieren von BigQuery-Daten als Protobuf-Spalten:
- Protobuf-Spalten sind nicht gut indexiert oder gefiltert. Die Suche nach dem Inhalt der Protobuf-Spalten kann weniger effektiv sein.
- Das Sortieren von Daten im Protobuf-Format kann schwierig sein.
Wenn diese Einschränkungen für Ihren Exportworkflow gelten, können Sie andere Methoden zum Exportieren von BigQuery-Daten in Betracht ziehen:
- Verwenden Sie geplante Abfragen mit
EXPORT DATA
-Anweisungen, um Ihre exportierten BigQuery-Daten nach Datum oder Uhrzeit zu sortieren und Exporte regelmäßig zu planen. BigQuery unterstützt den Export von Daten in Avro-, CSV-, JSON- und Parquet-Formate. - Mit Dataflow können Sie BigQuery-Daten entweder im Avro- oder CSV-Dateiformat exportieren.
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihr Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Exportieren von BigQuery-Daten als Protobuf-Spalten benötigen:
- Benutzerdefinierte Funktion erstellen:
BigQuery-Dateneditor (
roles/bigquery.dataEditor
) - Daten aus einer BigQuery-Tabelle exportieren:
BigQuery-Datenbetrachter (
roles/bigquery.dataViewer
) - Dateien in Cloud Storage lesen und in Cloud Storage hochladen:
Storage-Objekt-Ersteller (
roles/storage.objectCreator
)
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
UDF erstellen
Im Folgenden wird gezeigt, wie Sie eine benutzerdefinierte Funktion erstellen, die den BigQuery-Datentyp STRUCT
in eine Protobuf-Spalte konvertiert:
Klonen Sie in einer Befehlszeile das Repository
bigquery-utils.git
:git clone https://github.com/GoogleCloudPlatform/bigquery-utils.git
Rufen Sie den Protobuf-Exportordner auf.
cd bigquery-utils/tools/protobuf_export
Fügen Sie Ihre Proto-Dateien zum Ordner
./protos
hinzu.Installieren Sie die erforderlichen Pakete aus dem GitHub-Repository:
npm install
Verpacken Sie das Paket mit Webpack:
npx webpack --config webpack.config.js --stats-error-details
Suchen Sie in Ihrem
dist/
-Ordner die Dateipbwrapper.js
und kopieren Sie die Datei in einen Cloud Storage-Bucket.Erstellen Sie eine UDF, die aus Ihren vorhandenen BigQuery-Spalten eine Protobuf-Spalte erstellt:
CREATE FUNCTION DATASET_ID.toMyProtoMessage(input STRUCT<field_1 TYPE1, field_2 TYPE2>) RETURNS BYTES LANGUAGE js OPTIONS ( library=["gs://BUCKET_NAME/pbwrapper.js"] ) AS r""" let message = pbwrapper.setup("PROTO_PACKAGE.PROTO_MESSAGE") return pbwrapper.parse(message, input) """;
Ersetzen Sie Folgendes:
DATASET_ID
: die ID des Datasets, in dem Sie die Funktion speichernBUCKET_NAME
: der Name Ihres Cloud Storage-BucketsPROTO_PACKAGE
: der Paketname für Ihre Proto-DateiPROTO_MESSAGE
: der Nachrichtentyp für Ihre Proto-Datei
Weitere Informationen zur Verwendung von Paketen in der Proto-Sprache finden Sie unter Pakete.
Spalten als Protobuf-Werte formatieren
Führen Sie nach dem Erstellen der UDF die Funktion aus:
SELECT DATASET_ID.toMyProtoMessage(STRUCT(COLUMN_TYPE1, COLUMN_TYPE2)) AS protoResult FROM `DATASET_NAME` LIMIT 100;
Ersetzen Sie Folgendes:
DATASET_ID
: die ID des Datasets, in dem Sie die Funktion speichernDATASET_NAME
: der Name Ihres Datasets, z. B.dataset_name.table_name
COLUMN_TYPE1
: der Name einer Spalte. Spalten können alle unterstützten skalaren Werttypen oder nicht skalaren Typen enthalten, einschließlichARRAY
undSTRUCT
.COLUMN_TYPE2
: der Name einer Spalte. Spalten können alle unterstützten skalaren Werttypen oder nicht skalaren Typen enthalten, einschließlichARRAY
undSTRUCT
.
Mit Protobuf-Werten arbeiten
Wenn Ihre BigQuery-Daten im Protobuf-Format exportiert wurden, können Sie jetzt mit Ihren Daten als vollständig typisiertes Objekt oder Struct arbeiten.
Die folgenden Codebeispiele enthalten mehrere Beispiele für die Verarbeitung oder Verwendung der exportierten Daten: