Dieses Dokument bietet einen Überblick über BigQuery-Abos, den zugehörigen Workflow und die zugehörigen Eigenschaften.
Ein BigQuery-Abo ist eine Art von Exportabo, das Nachrichten beim Empfang in eine vorhandene BigQuery-Tabelle schreibt. Sie müssen keinen separaten Abonnentenclient konfigurieren. Verwenden Sie die Google Cloud Console, die Google Cloud CLI, die Clientbibliotheken oder die Pub/Sub API, um ein BigQuery-Abo zu erstellen, zu aktualisieren, aufzulisten, zu trennen oder zu löschen.
Ohne den BigQuery-Abo-Typ benötigen Sie ein Pull- oder Push-Abo und einen Abonnenten (z. B. Dataflow), der Nachrichten liest und in eine BigQuery-Tabelle schreibt. Der Aufwand für die Ausführung eines Dataflow-Jobs ist nicht erforderlich, wenn Nachrichten keine zusätzliche Verarbeitung benötigen, bevor sie in einer BigQuery-Tabelle gespeichert werden. In diesem Fall können Sie stattdessen ein BigQuery-Abo verwenden.
Für einfache Änderungen an Nachrichten können Sie Ihrem BigQuery-Abo eine Transformation einzelner Nachrichten anhängen. Für Pub/Sub-Systeme, in denen eine komplexere Datentransformation erforderlich ist, bevor die Daten in einer BigQuery-Tabelle gespeichert werden, wird jedoch eine Dataflow-Pipeline empfohlen, insbesondere wenn Sie Fenster oder Aggregationen für Nachrichten verwenden möchten.
Informationen zum Streamen von Daten aus Pub/Sub zu BigQuery mit Transformation mithilfe von Dataflow finden Sie unter Von Pub/Sub zu BigQuery streamen.
Die Dataflow-Vorlage „Pub/Sub-Abo für BigQuery“ erzwingt standardmäßig die Exactly-Once-Zustellung. Dies wird in der Regel durch Deduplizierungsmechanismen in der Dataflow-Pipeline erreicht. Das BigQuery-Abo unterstützt jedoch nur die mindestens einmalige Übermittlung. Wenn eine genaue Deduplizierung für Ihren Anwendungsfall entscheidend ist, sollten Sie nachgelagerte Prozesse in BigQuery in Betracht ziehen, um potenzielle Duplikate zu verarbeiten.
Hinweis
Bevor Sie dieses Dokument lesen, sollten Sie mit Folgendem vertraut sein:
Funktionsweise von Pub/Sub und die verschiedenen Pub/Sub-Begriffe.
Die verschiedenen Arten von Abos, die von Pub/Sub unterstützt werden, und die Gründe für die Verwendung eines BigQuery-Abos.
Wie BigQuery funktioniert und wie Sie BigQuery-Tabellen konfigurieren und verwalten.
Workflow für BigQuery-Abos
Das folgende Bild zeigt den Workflow zwischen einem BigQuery-Abo und BigQuery.
Hier eine kurze Beschreibung des Workflows, der sich auf Abbildung 1 bezieht:
- Pub/Sub verwendet die BigQuery Storage Write API (gRPC), um Daten an die BigQuery-Tabelle zu senden.
- Die Nachrichten werden in Batches an die BigQuery-Tabelle gesendet.
- Nach erfolgreichem Abschluss eines Schreibvorgangs gibt die API eine OK-Antwort zurück.
- Wenn bei der Schreiboperation Fehler auftreten, wird die Pub/Sub-Nachricht selbst negativ bestätigt. Die Nachricht wird dann noch einmal gesendet. Wenn die Zustellung der Nachricht oft genug fehlschlägt und im Abo ein Thema für unzustellbare Nachrichten konfiguriert ist, wird die Nachricht in dieses Thema verschoben.
Eigenschaften eines BigQuery-Abos
Die Eigenschaften, die Sie für ein BigQuery-Abo konfigurieren, bestimmen die BigQuery-Tabelle, in die Pub/Sub Nachrichten schreibt, und den Schematyp dieser Tabelle.
Weitere Informationen finden Sie unter BigQuery-Properties.
Schemakompatibilität
Dieser Abschnitt gilt nur, wenn Sie beim Erstellen eines BigQuery-Abos die Option Schema des Themas verwenden auswählen.
Pub/Sub und BigQuery verwenden unterschiedliche Methoden zum Definieren ihrer Schemas. Pub/Sub-Schemas werden im Apache Avro- oder Protocol Buffer-Format definiert, während BigQuery-Schemas in verschiedenen Formaten definiert werden.
Im Folgenden finden Sie eine Liste wichtiger Informationen zur Schemakompatibilität zwischen einem Pub/Sub-Thema und einer BigQuery-Tabelle.
Nachrichten, die ein falsch formatiertes Feld enthalten, werden nicht in BigQuery geschrieben.
Im BigQuery-Schema sind
INT,SMALLINT,INTEGER,BIGINT,TINYINTundBYTEINTAliase fürINTEGER.DECIMAList ein Alias fürNUMERICundBIGDECIMAList ein Alias fürBIGNUMERIC.Wenn der Typ im Themaschema
stringund der Typ in der BigQuery-TabelleJSON,TIMESTAMP,DATETIME,DATE,TIME,NUMERICoderBIGNUMERICist, muss jeder Wert für dieses Feld in einer Pub/Sub-Nachricht dem Format entsprechen, das für den BigQuery-Datentyp angegeben ist.Einige logische Avro-Typen werden unterstützt, wie in der folgenden Tabelle angegeben. Alle nicht aufgeführten logischen Typen entsprechen nur dem entsprechenden Avro-Typ, den sie annotieren, wie in der Avro-Spezifikation beschrieben.
Im Folgenden finden Sie eine Sammlung von Zuordnungen verschiedener Schemaformate zu BigQuery-Datentypen.
Avro-Typen
| Avro-Typ | BigQuery-Datentyp |
null |
Any NULLABLE |
boolean |
BOOLEAN |
int |
INTEGER, NUMERIC oder
BIGNUMERIC |
long |
INTEGER, NUMERIC oder
BIGNUMERIC |
float |
FLOAT64, NUMERIC oder
BIGNUMERIC |
double |
FLOAT64, NUMERIC oder
BIGNUMERIC |
bytes |
BYTES, NUMERIC oder
BIGNUMERIC |
string |
STRING, JSON,
TIMESTAMP, DATETIME,
DATE, TIME,
NUMERIC oder BIGNUMERIC |
record |
RECORD/STRUCT |
array von Type |
REPEATED Type |
map mit dem Werttyp ValueType
|
REPEATED STRUCT <key STRING, value
ValueType> |
union mit zwei Typen, einer mit null und der andere mit Type |
NULLABLE Type |
andere union |
Nicht zuordenbar |
fixed |
BYTES, NUMERIC oder
BIGNUMERIC |
enum |
INTEGER |
Logische Avro-Typen
| Logischer Avro-Typ | BigQuery-Datentyp |
timestamp-micros |
TIMESTAMP |
timestamp-millis |
TIMESTAMP |
date |
DATE |
time-micros |
TIME |
time-millis |
TIME |
duration |
INTERVAL |
decimal |
NUMERIC oder BIGNUMERIC |
Protokollzwischenspeichertypen
| Protocol Buffer Type (Protokollpuffertyp) | BigQuery-Datentyp |
double |
FLOAT64, NUMERIC oder
BIGNUMERIC |
float |
FLOAT64, NUMERIC oder
BIGNUMERIC |
int32 |
INTEGER, NUMERIC,
BIGNUMERIC oder DATE |