BigQuery-Abos

Dieses Dokument bietet einen Überblick über ein BigQuery-Abo, den Workflow und die zugehörigen Properties.

Ein BigQuery-Abo ist ein Exportabo die Nachrichten in eine vorhandene BigQuery-Tabelle als wenn sie empfangen werden. Sie müssen keinen separaten Abonnentenclient konfigurieren. Verwenden Sie die Google Cloud Console, die Google Cloud CLI, die Clientbibliotheken oder die Pub/Sub API verwenden, um ein BigQuery-Abo.

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. Weitere Informationen zum Streamen Daten aus Pub/Sub zu BigQuery mit Transformation mit Dataflow ausführen, siehe "Streamen von Pub/Sub zu BigQuery

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 ist entscheidend für Ihren Anwendungsfall, sollten Sie nachgelagerte Prozesse in BigQuery zum Verarbeiten potenzieller Duplikate.

Hinweise

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.

  • Funktionsweise und Konfiguration von BigQuery und BigQuery-Tabellen verwalten.

BigQuery-Abo-Workflow

In der folgenden Abbildung sehen Sie den Workflow Abo und BigQuery.

Nachrichtenfluss für ein BigQuery-Abo
Abbildung 1. Workflow für ein BigQuery-Abo

Hier ist eine kurze Beschreibung des Workflows, der auf Abbildung 1 verweist:

  1. Pub/Sub nutzt den BigQuery-Speicherschreibvorgang API zum Senden von Daten an BigQuery .
  2. Die Nachrichten werden in Batches an die BigQuery-Tabelle gesendet.
  3. Nach erfolgreichem Abschluss eines Schreibvorgangs gibt die API eine OK-Meldung aus. Antwort.
  4. 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.

Attribute 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 Eigenschaften.

Schemakompatibilität

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: INT, SMALLINT, INTEGER BIGINT, TINYINT und BYTEINT sind Aliasse für INTEGER. DECIMAL ist ein Alias für NUMERIC; und BIGDECIMAL ist ein Alias für BIGNUMERIC.

  • Wenn der Typ im Schema des Themas ein string ist und der Typ im BigQuery-Tabelle ist JSON, TIMESTAMP, DATETIME, DATE, TIME, NUMERIC oder BIGNUMERIC, 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 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 Type NULLABLE Type
Andere union Nicht zugeordnet
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

Protokollzwischenspeichertypen

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. Hier sehen Sie die Zuordnung von BigQuery-Daten: zur Ganzzahl, die sie repräsentiert.

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 Change Data Capture (CDC) use_topic_schema oder use_table_schema ist in den Abo-Properties auf true festgelegt. Um die Funktion mit use_topic_schema, legen Sie das Schema des Themas mit dem folgendes Feld hinzu:

  • _CHANGE_TYPE (erforderlich): Das Feld string ist auf UPSERT oder DELETE festgelegt.

    • Wenn eine Pub/Sub-Nachricht in die In der BigQuery-Tabelle ist _CHANGE_TYPE auf UPSERT 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 auf DELETE gesetzt. löscht BigQuery die Zeile in der Tabelle mit den falls vorhanden.

Um die Funktion mit use_table_schema zu verwenden, fügen Sie das vorherige Feld in der JSON-Nachricht.

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 keine Pub/Sub-Nachricht in BigQuery, die Nachricht kann nicht bestätigt werden. Um solche unzustellbare Nachrichten, konfigurieren Sie einen unzustellbaren Thema in der BigQuery-Abo. Die Pub/Sub-Nachricht an das Thema für unzustellbare Nachrichten weitergeleitet wurde, enthält ein Attribut CloudPubSubDeadLetterSourceDeliveryErrorMessage mit dem Grund, Pub/Sub-Nachricht konnte nicht geschrieben werden BigQuery

Wenn Pub/Sub keine Nachrichten in BigQuery schreiben kann, unterstützt Pub/Sub die Zustellung von Nachrichten ähnlich wie Push-Backoff-Verhalten. Wenn die hat ein Thema für unzustellbare Nachrichten angehängt unterstützt Pub/Sub die Zustellung nicht, wenn Nachrichtenfehler auftreten. sind 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. 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. Ich kann die anderen Überlegungen zum Storage Write API-Kontingent in dieser Instanz ignorieren.

Preise

Informationen zu den Preisen für BigQuery-Abos finden Sie in der Pub/Sub-Preisseite

Nächste Schritte