Dieses Dokument bietet einen Überblick über ein BigQuery-Abo, seinen Workflow und die zugehörigen Properties.
Ein BigQuery-Abo ist ein Exportabo die Nachrichten in eine vorhandene BigQuery-Tabelle als wenn sie empfangen werden. Du musst 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 (z. B. Dataflow), das Nachrichten liest und in eine BigQuery-Tabelle. 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. Informationen zum Streamen von Daten aus Pub/Sub zu BigQuery mit Transformation mit Dataflow finden Sie unter Von Pub/Sub zu BigQuery streamen.
Die Vorlage "Pub/Sub-Abo für BigQuery" aus Dataflow erzwingt eine genau einmalige Zustellung durch Standardeinstellung. Dies wird in der Regel durch Deduplizierungsmechanismen innerhalb der Dataflow-Pipeline. Die BigQuery-Bibliothek kann das Abo nur mindestens einmal zugestellt werden. Wenn die genaue Deduplizierung für Ihren Anwendungsfall entscheidend ist, sollten Sie nachgelagerte Prozesse in BigQuery verwenden, um potenzielle Duplikate zu verarbeiten.
Hinweise
Bevor Sie dieses Dokument lesen, sollten Sie sich mit folgenden Themen vertraut machen:
Funktionsweise von Pub/Sub und die verschiedenen Pub/Sub-Begriffe
Die verschiedenen Arten von Abos, die Pub/Sub unterstützt, und warum Sie ein BigQuery-Abo verwenden sollten.
Funktionsweise und Konfiguration von BigQuery und BigQuery-Tabellen verwalten.
BigQuery-Aboworkflow
In der folgenden Abbildung sehen Sie den Workflow Abo und BigQuery.
Hier ist eine kurze Beschreibung des Workflows, der auf Abbildung 1 verweist:
- Pub/Sub nutzt den BigQuery-Speicherschreibvorgang API zum Senden von Daten an BigQuery .
- Die Nachrichten werden in Batches an die BigQuery-Tabelle gesendet.
- Nach erfolgreichem Abschluss eines Schreibvorgangs gibt die API eine OK-Meldung aus. Antwort.
- Falls beim Schreibvorgang Fehler auftreten, Die Pub/Sub-Nachricht selbst wird negativ bestätigt. Die wird die Nachricht erneut gesendet. Wenn die Meldung häufig fehlschlägt und ein Fehler Thema für unzustellbare Nachrichten, das für das Abo konfiguriert ist, wird die Nachricht verschoben. unzustellbare Nachrichten über.
Eigenschaften eines BigQuery-Abos
Die Attribute, die Sie für ein BigQuery-Abo konfigurieren BigQuery-Tabelle ermitteln, für die Pub/Sub schreibt Nachrichten und den Schematyp dieser Tabelle.
Weitere Informationen finden Sie unter BigQuery-Properties.
Schemakompatibilität
Dieser Abschnitt gilt nur, wenn Sie das Option Schema des Themas verwenden wenn Sie ein BigQuery-Abo erstellen.
Pub/Sub und BigQuery verwenden unterschiedliche Methoden, um ihre Schemas zu definieren. 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 mit wichtige Informationen zur Schemakompatibilität zwischen einem Pub/Sub-Thema und eine BigQuery-Tabelle.
Nachrichten mit einem falsch formatierten Feld werden nicht in BigQuery geschrieben.
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 Schema des Themas ein
string
ist und der Typ im BigQuery-Tabelle istJSON
,TIMESTAMP
,DATETIME
,DATE
,TIME
,NUMERIC
oderBIGNUMERIC
, dann kann jeder Wert für dieses Feld Pub/Sub-Nachricht muss dem Format entsprechen, das für die BigQuery-Daten eingeben.Einige logische Avro-Typen werden unterstützt, wie in der folgenden Tabelle angegeben. Alle nicht aufgeführten logischen Typen stimmen nur mit dem entsprechenden Avro-Typ überein, der sie annotiert, 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, von denen einer null und der andere Type ist |
NULLABLE Type |
Sonstige union s |
Nicht kartografierbar |
fixed |
BYTES , NUMERIC oder
BIGNUMERIC |
enum |
INTEGER |
Logische Avro-Typen
Avro Logical-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. Nachfolgend 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 |
Das Datum und die Uhrzeit in Mikrosekunden, ausgedrückt als amtliche Zeit mithilfe des CivilTimeEncoder |
TIME |
Die Zeit in Mikrosekunden, ausgedrückt als amtliche Zeit mithilfe des 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): Einstring
-Feld, das aufUPSERT
oderDELETE
gesetzt ist.Wenn eine Pub/Sub-Nachricht in die In der BigQuery-Tabelle ist
_CHANGE_TYPE
aufUPSERT
gesetzt. aktualisiert BigQuery die Zeile mit demselben Schlüssel, vorhanden ist oder eine neue Zeile eingefügt wird, falls dies nicht der Fall ist.Wenn eine Pub/Sub-Nachricht in die In der BigQuery-Tabelle ist
_CHANGE_TYPE
aufDELETE
gesetzt. löscht BigQuery die Zeile in der Tabelle mit den falls vorhanden.
_CHANGE_SEQUENCE_NUMBER
(optional): Einint64
(long
) oderint32
(int
) festgelegt ist, damit Aktualisierungen und Löschungen an der BigQuery-Tabelle werden der Reihe nach verarbeitet. 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: Für Pub/Sub ist ein ganzzahliger Wert erforderlich, im Gegensatz zum stringbasierten Wert, der bei der direkten 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
Damit ein BigQuery-Abo erstellt werden kann, muss das Pub/Sub-Dienstkonto die Berechtigung zum Schreiben in die entsprechende BigQuery-Tabelle und zum Lesen der Tabellenmetadaten haben. Weitere Informationen Weitere Informationen zum Zuweisen von BigQuery-Rollen zum Pub/Sub-Dienst Konto.
Umgang mit Nachrichtenfehlern
Wenn keine Pub/Sub-Nachricht in
BigQuery, die Nachricht kann nicht bestätigt werden. Um solche
unzustellbare Nachrichten, konfigurieren Sie eine unzustellbare Nachricht,
Thema in der
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.
BigQuery-Abos schreiben Daten mithilfe des BigQuery Storage Write API. Informationen zu Kontingenten und Limits für die Storage Write API finden Sie unter BigQuery Storage Write API-Anfragen. BigQuery-Abos belegen 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, z. B. 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.
Abo mit der
gcloud
-Befehlszeile erstellen oder ändern .Abo mit REST erstellen oder ändern APIs