Dieses Dokument bietet einen Überblick über ein BigQuery-Abo, seinen Workflow und die zugehörigen Properties.
Ein BigQuery-Abo ist eine Art Exportabo, bei dem Nachrichten beim Empfang in eine vorhandene BigQuery-Tabelle geschrieben werden. Sie müssen keinen separaten Abonnentenclient konfigurieren. Mit der Google Cloud Console, der Google Cloud CLI, den Clientbibliotheken oder der Pub/Sub API können Sie BigQuery-Abos erstellen, aktualisieren, auflisten, trennen oder löschen.
Ohne den BigQuery-Abotyp 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 beim Ausführen eines Dataflow-Job ist nicht erforderlich, wenn für Nachrichten nichts erforderlich ist zusätzliche Verarbeitung vor dem Speichern in einer BigQuery-Tabelle; können Sie stattdessen ein BigQuery-Abo verwenden.
Eine Dataflow-Pipeline wird jedoch für Pub/Sub-Systeme, bei denen zuerst eine gewisse Datentransformation erforderlich ist werden die Daten in einer BigQuery-Tabelle gespeichert. Weitere Informationen zum Streamen Daten von Pub/Sub zu BigQuery mit Transformation mit Dataflow ausführen, siehe "Streamen von Pub/Sub zu BigQuery
Die Pub/Sub-Abo-zu-BigQuery-Vorlage aus Dataflow erzwingt standardmäßig eine Übermittlung genau einmal. Dies wird in der Regel durch Deduplizierungsmechanismen innerhalb der Dataflow-Pipeline. Das BigQuery-Abo unterstützt jedoch nur die Übermittlung mindestens einmal. Wenn die genaue Deduplizierung die für Ihren Anwendungsfall wichtig sind, sollten Sie nachgelagerte Prozesse BigQuery zum Verarbeiten potenzieller Duplikate.
Hinweis
Bevor Sie dieses Dokument lesen, sollten Sie sich mit folgenden Themen vertraut machen:
Die Funktionsweise von Pub/Sub und die verschiedenen Pub/Sub-Bedingungen
Die verschiedenen Arten von Abos die von Pub/Sub unterstützt werden, und warum BigQuery-Abo.
Informationen zur Funktionsweise von BigQuery und zum Konfigurieren und Verwalten von BigQuery-Tabellen.
BigQuery-Aboworkflow
Die folgende Abbildung zeigt den Workflow zwischen einem BigQuery-Abo und BigQuery.
Hier ist eine kurze Beschreibung des Workflows, der auf Abbildung 1 verweist:
- Pub/Sub verwendet die BigQuery Storage Write API, 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-Meldung aus. Antwort.
- Bei Fehlern beim Schreibvorgang wird die Pub/Sub-Nachricht selbst negativ bestätigt. Die Nachricht wird dann noch einmal gesendet. Wenn die Nachricht oft genug fehlschlägt und für das Abo ein Thema für unzustellbare Nachrichten konfiguriert ist, wird die Nachricht in das Thema für unzustellbare Nachrichten verschoben.
Attribute 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 nutzen unterschiedliche ihre Schemas zu definieren. Pub/Sub-Schemas sind in Apache definiert Avro- oder Protocol Buffer-Format während BigQuery-Schemas werden mithilfe eines in verschiedenen Formaten.
Im Folgenden finden Sie eine Liste mit wichtige Informationen zur Schemakompatibilität zwischen einem Pub/Sub-Thema und eine BigQuery-Tabelle.
Nachrichten, die ein falsch formatiertes Feld enthalten, werden nicht BigQuery
Im BigQuery-Schema sind
INT
,SMALLINT
,INTEGER
,BIGINT
,TINYINT
undBYTEINT
Aliasse fürINTEGER
,DECIMAL
ist ein Alias fürNUMERIC
undBIGDECIMAL
ist ein Alias fürBIGNUMERIC
.Wenn der Typ im Themenschema
string
und der Typ in der BigQuery-TabelleJSON
,TIMESTAMP
,DATETIME
,DATE
,TIME
,NUMERIC
oderBIGNUMERIC
ist, muss jeder Wert für dieses Feld in einer Pub/Sub-Nachricht dem für den BigQuery-Datentyp angegebenen Format entsprechen.Einige logische Avro-Typen werden unterstützt, wie in der folgenden Tabelle angegeben. Alle logischen Typen, die nicht aufgeführt sind, entsprechen nur dem entsprechenden Avro-Typ, den sie 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 die anderen Type |
NULLABLE Type |
Sonstige union s |
Nicht kartografierbar |
fixed |
BYTES , NUMERIC oder
BIGNUMERIC |
enum |
INTEGER |
Logische Avro-Typen
Logischer Avro-Typ | BigQuery-Datentyp |
timestamp-micros |
TIMESTAMP |
date |
DATE |
time-micros |
TIME |
duration |
INTERVAL |
decimal |
NUMERIC oder BIGNUMERIC |
Protokollpuffertypen
Protokollzwischenspeichertyp | BigQuery-Datentyp |
double |
FLOAT64 , NUMERIC oder
BIGNUMERIC |
float |
FLOAT64 , NUMERIC oder
BIGNUMERIC |
int32 |
INTEGER , NUMERIC ,
BIGNUMERIC oder DATE |
int64 |
INTEGER , NUMERIC ,
BIGNUMERIC , DATE ,
DATETIME oder TIMESTAMP |
uint32 |
INTEGER , NUMERIC ,
BIGNUMERIC oder DATE |
uint64 |
NUMERIC oder BIGNUMERIC |
sint32 |
INTEGER , NUMERIC oder
BIGNUMERIC |
sint64 |
INTEGER , NUMERIC ,
BIGNUMERIC , DATE ,
DATETIME oder TIMESTAMP |
fixed32 |
INTEGER , NUMERIC ,
BIGNUMERIC oder DATE |
fixed64 |
NUMERIC oder BIGNUMERIC |
sfixed32 |
INTEGER , NUMERIC ,
BIGNUMERIC oder DATE |
sfixed64 |
INTEGER , NUMERIC ,
BIGNUMERIC , DATE ,
DATETIME oder TIMESTAMP |
bool |
BOOLEAN |
string |
STRING , JSON ,
TIMESTAMP , DATETIME ,
DATE , TIME ,
NUMERIC oder BIGNUMERIC |
bytes |
BYTES , NUMERIC oder
BIGNUMERIC |
enum |
INTEGER |
message |
RECORD/STRUCT |
oneof |
Nicht zugeordnet |
map<KeyType, ValueType> |
REPEATED RECORD<key KeyType, value
ValueType> |
enum |
INTEGER |
repeated/array of Type |
REPEATED Type |
Ganzzahldarstellung von Datum und Uhrzeit
Bei der Zuordnung von einer Ganzzahl zu einem der Datums- oder Uhrzeittypen muss die Zahl den richtigen Wert darstellen. Unten finden Sie die Zuordnung von BigQuery-Datentypen zu den entsprechenden Ganzzahlen.
BigQuery-Datentyp | Ganzzahldarstellung |
DATE |
Die Anzahl der Tage seit der Unix-Epoche, 1. Januar 1970 |
DATETIME |
Datum und Uhrzeit in Mikrosekunden, ausgedrückt als bürgerliche Zeit mit dem CivilTimeEncoder |
TIME |
Die Zeit in Mikrosekunden, ausgedrückt als bürgerliche Zeit mit dem CivilTimeEncoder |
TIMESTAMP |
Die Anzahl der Mikrosekunden seit der Unix-Epoche, 1. Januar 1970, 00:00:00 UTC |
Change Data Capture in BigQuery
BigQuery-Abos unterstützen CDC-Aktualisierungen (Change Data Capture), wenn use_topic_schema
oder use_table_schema
in den Aboeigenschaften auf true
festgelegt ist. Wenn Sie die Funktion mit use_topic_schema
verwenden möchten, legen Sie das Schema des Themas mit den folgenden Feldern fest:
_CHANGE_TYPE
(erforderlich): Das Feldstring
ist aufUPSERT
oderDELETE
festgelegt.Wenn bei einer Pub/Sub-Nachricht, die in die BigQuery-Tabelle geschrieben wird,
_CHANGE_TYPE
aufUPSERT
festgelegt ist, aktualisiert BigQuery die Zeile mit demselben Schlüssel, falls vorhanden, oder fügt eine neue Zeile ein, falls nicht.Wenn für eine Pub/Sub-Nachricht, die in die BigQuery-Tabelle geschrieben wurde,
_CHANGE_TYPE
aufDELETE
festgelegt ist, löscht BigQuery die Zeile in der Tabelle mit demselben Schlüssel, falls vorhanden.
_CHANGE_SEQUENCE_NUMBER
(optional): Einint64
- (long
) oderint32
-Feld (int
), das dafür sorgt, dass Aktualisierungen und Löschvorgänge in der BigQuery-Tabelle in der richtigen Reihenfolge verarbeitet werden. Nachrichten mit demselben Zeilenschlüssel müssen einen monoton steigenden Wert für_CHANGE_SEQUENCE_NUMBER
enthalten. Nachrichten mit Sequenznummern, die kleiner sind als die höchste verarbeitete Sequenznummer für eine Zeile, haben keine Auswirkungen auf die Zeile in der BigQuery-Tabelle. Hinweis dass Pub/Sub einen auf Ganzzahlen basierenden Wert benötigt, Der stringbasierte Wert, der bei der Interaktion mit BigQuery verwendet wird .
Wenn Sie die Funktion mit use_table_schema
verwenden möchten, fügen Sie die vorherigen Felder in die JSON-Nachricht ein.
Pub/Sub-Dienstkontoberechtigungen
Zum Erstellen eines BigQuery-Abos Dienstkonto muss die Berechtigung zum Schreiben in den spezifischen BigQuery-Tabelle und zum Lesen der Tabellenmetadaten. Weitere Informationen Weitere Informationen zum Zuweisen von BigQuery-Rollen zum Pub/Sub-Dienst Konto.
Umgang mit Nachrichtenfehlern
Wenn eine Pub/Sub-Nachricht nicht in BigQuery geschrieben werden kann, kann sie nicht bestätigt werden. Wenn Sie solche nicht zustellbaren Nachrichten weiterleiten möchten, konfigurieren Sie ein Thema für unzustellbare Nachrichten für das BigQuery-Abo. Die an das Thema für unzustellbare Nachrichten weitergeleitete Pub/Sub-Nachricht enthält das Attribut CloudPubSubDeadLetterSourceDeliveryErrorMessage
mit dem Grund, warum die Pub/Sub-Nachricht nicht in BigQuery geschrieben werden konnte.
Wenn Pub/Sub keine Nachrichten in BigQuery schreiben kann, verzögert Pub/Sub die Zustellung der Nachrichten ähnlich wie beim Push-Backoff-Verhalten. Wenn die hat ein Thema für unzustellbare Nachrichten angehängt unterstützt Pub/Sub die Zustellung nicht, wenn Nachrichtenfehler auftreten. auf Schemakompatibilitätsfehler zurückzuführen.
Kontingente und Limits
Für den BigQuery-Abonnenten gelten Kontingentbeschränkungen Durchsatz pro Region. Weitere Informationen finden Sie unter Pub/Sub-Kontingente und Limits.
Bei BigQuery-Abos werden Daten mithilfe der BigQuery Storage Write API geschrieben. Für Informationen zu den Kontingenten und Limits für die Storage Write API finden Sie unter BigQuery Storage Write API -Anfragen. BigQuery Abos verbrauchen nur das Durchsatzkontingent für die Storage Write API. Die anderen Kontingente für die Storage Write API können in diesem Fall ignoriert werden.
Preise
Informationen zu den Preisen für BigQuery-Abos finden Sie in der Pub/Sub-Preisseite
Nächste Schritte
Erstellen Sie ein Abo, beispielsweise ein BigQuery- Abo.
Fehler in BigQuery beheben Abo.
Mehr über BigQuery erfahren
Prüfen Sie die Preise für Pub/Sub, einschließlich BigQuery-Abos.
Erstellen oder ändern Sie ein Abo mit
gcloud
-Befehlen.Abo mit REST erstellen oder ändern APIs