BigQuery-Abos erstellen

In diesem Dokument wird beschrieben, wie Sie ein BigQuery-Abo erstellen. Sie können ein BigQuery-Abo über die Google Cloud -Konsole, die Google Cloud CLI, die Clientbibliothek oder die Pub/Sub API erstellen.

Hinweise

Bevor Sie dieses Dokument lesen, sollten Sie mit Folgendem vertraut sein:

Neben Ihren Kenntnissen in Pub/Sub und BigQuery müssen Sie die folgenden Voraussetzungen erfüllen, bevor Sie ein BigQuery-Abo erstellen:

  • Eine BigQuery-Tabelle ist vorhanden. Alternativ können Sie ein solches Konto erstellen, wenn Sie das BigQuery-Abo erstellen, wie in den späteren Abschnitten dieses Dokuments beschrieben.

  • Kompatibilität zwischen dem Schema des Pub/Sub-Themas und der BigQuery-Tabelle. Wenn Sie eine nicht kompatible BigQuery-Tabelle hinzufügen, erhalten Sie eine Fehlermeldung zur Kompatibilität. Weitere Informationen finden Sie unter Schema-Kompatibilität.

Erforderliche Rollen und Berechtigungen

Die folgende Liste enthält Richtlinien zu Rollen und Berechtigungen:

  • Wenn Sie ein Abo erstellen möchten, müssen Sie die Zugriffssteuerung auf Projektebene konfigurieren.

  • Sie benötigen auch Berechtigungen auf Ressourcenebene, wenn sich Ihre Abos und Themen in verschiedenen Projekten befinden, wie später in diesem Abschnitt beschrieben.

  • Zum Erstellen eines BigQuery-Abos muss entweder der Pub/Sub-Dienst-Agent oder ein benutzerdefiniertes Dienstkonto die Berechtigung zum Schreiben in die entsprechende BigQuery-Tabelle haben. Weitere Informationen zum Erteilen dieser Berechtigungen finden Sie im nächsten Abschnitt dieses Dokuments.

  • Sie können ein BigQuery-Abo in einem Projekt so konfigurieren, dass Daten in eine BigQuery-Tabelle in einem anderen Projekt geschrieben werden.

Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle Pub/Sub-Editor (roles/pubsub.editor) für das Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Erstellen von BigQuery-Abos benötigen. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Diese vordefinierte Rolle enthält die Berechtigungen, die zum Erstellen von BigQuery-Abos erforderlich sind. Maximieren Sie den Abschnitt Erforderliche Berechtigungen, um die notwendigen Berechtigungen anzuzeigen:

Erforderliche Berechtigungen

Die folgenden Berechtigungen sind zum Erstellen von BigQuery-Abos erforderlich:

  • Aus einem Abo abrufen: pubsub.subscriptions.consume
  • Abo erstellen: pubsub.subscriptions.create
  • Abo löschen: pubsub.subscriptions.delete
  • Abo abschließen: pubsub.subscriptions.get
  • Abo auflisten: pubsub.subscriptions.list
  • Abo aktualisieren: pubsub.subscriptions.update
  • So hängen Sie ein Abo an ein Thema an: pubsub.topics.attachSubscription
  • IAM-Richtlinie für ein Abo abrufen: pubsub.subscriptions.getIamPolicy
  • Konfigurieren Sie die IAM-Richtlinie für ein Abo: pubsub.subscriptions.setIamPolicy

Sie können diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.

Damit ein Prinzipal in einem Projekt ein BigQuery-Abo in einem anderen Projekt erstellen kann, müssen Sie diesem Prinzipal die Rolle „Pub/Sub-Bearbeiter“ (roles/pubsub.editor) in beiden Projekten zuweisen. Dadurch werden die erforderlichen Berechtigungen zum Erstellen des neuen BigQuery-Abos und zum Anhängen an das ursprüngliche Thema gewährt. Mit der Rolle „Pub/Sub-Bearbeiter“ (roles/pubsub.editor) für das Thema können Sie auch BigQuery-Abos in einem anderen Projekt an das Thema anhängen.

Dienstkonten Rollen zuweisen

Einige Google Cloud -Dienste haben Google Cloud-verwaltete Dienstkonten, mit denen die Dienste auf Ihre Ressourcen zugreifen können. Diese Dienstkonten werden als Dienst-Agents bezeichnet. Pub/Sub erstellt und verwaltet für jedes Projekt einen Dienst-Agenten im Format service-project-number@gcp-sa-pubsub.iam.gserviceaccount.com.

Sie können entweder dem Pub/Sub-Dienst-Agent oder einem benutzerdefinierten Dienstkonto die Berechtigung zum Schreiben in die BigQuery-Tabelle erteilen.

Wenn Sie dem Pub/Sub-Dienst-Agent Berechtigungen erteilen, kann jeder Nutzer, der die Berechtigung zum Erstellen eines Abos in Ihrem Projekt hat, in die BigQuery-Tabelle schreiben. Wenn Sie eine detailliertere Berechtigung zum Schreiben in die BigQuery-Tabelle gewähren möchten, konfigurieren Sie stattdessen ein benutzerdefiniertes Dienstkonto.

Weitere Informationen zu BigQuery IAM finden Sie unter BigQuery-Rollen und -Berechtigungen.

Pub/Sub-Dienst-Agent BigQuery-Rollen zuweisen

Wenn Sie ein BigQuery-Abo mit dem Pub/Sub-Dienstkonto erstellen möchten, muss es die Berechtigung haben, in die jeweilige BigQuery-Tabelle zu schreiben und die Tabellenmetadaten zu lesen.

Weisen Sie dem Pub/Sub-Dienst-Agent die Rolle „BigQuery-Datenbearbeiter“ (roles/bigquery.dataEditor) zu. Sie können die Berechtigung für eine einzelne Tabelle oder für das gesamte Projekt erteilen.

Tabelle

  1. Wechseln Sie in der Google Cloud Console zu BigQuery Studio.

    Zu BigQuery Studio

  2. Geben Sie im Suchfeld des Bereichs „Explorer“ mit dem Label Nach Name und Labels filtern den Namen der Tabelle ein und drücken Sie die Eingabetaste.

  3. Klicken Sie auf die Tabelle, für die Sie Berechtigungen gewähren möchten.

  4. Wählen Sie für die Tabelle  > Weitere Aktionen > Freigeben > Berechtigungen aus.

    Alternativ können Sie auf die Tabelle klicken und auf der Hauptseite Freigabe > Berechtigungen klicken.

    Das Fenster Freigabeberechtigungen wird geöffnet.

  5. Klicken Sie auf Hauptkonto hinzufügen.

  6. Geben Sie unter Hauptkonten hinzufügen den Namen Ihres Pub/Sub-Dienst-Agents für das Projekt ein, das das Abo enthält. Der Dienst-Agent hat das Format service-project-number@gcp-sa-pubsub.iam.gserviceaccount.com. Für ein Projekt mit project-number=112233445566 hat der Dienst-Agent beispielsweise das Format service-112233445566@gcp-sa-pubsub.iam.gserviceaccount.com.

  7. Geben Sie im Drop-down-Menü Rolle auswählen BigQuery ein und wählen Sie die Rolle BigQuery-Datenbearbeiter aus.

  8. Klicken Sie auf Speichern.

Projekt

  1. Rufen Sie in der Google Cloud Console die Seite IAM auf.

    IAM aufrufen

  2. Klicken Sie auf Zugriff erlauben.

  3. Geben Sie im Abschnitt Hauptkonten hinzufügen den Namen Ihres Pub/Sub-Dienst-Agents ein. Der Dienst-Agent hat das Format service-project-number@gcp-sa-pubsub.iam.gserviceaccount.com. Für ein Projekt mit project-number=112233445566 hat der Dienst-Agent beispielsweise das Format service-112233445566@gcp-sa-pubsub.iam.gserviceaccount.com.

  4. Klicken Sie im Bereich Rollen zuweisen auf Weitere Rolle hinzufügen.

  5. Geben Sie im Drop-down-Menü Rolle auswählen BigQuery ein und wählen Sie die Rolle BigQuery-Datenbearbeiter aus.

  6. Klicken Sie auf Speichern.

Benutzerdefinierten Dienstkonten BigQuery-Rollen zuweisen

Wenn Sie ein benutzerdefiniertes Dienstkonto zum Schreiben in eine BigQuery-Tabelle verwenden möchten, müssen Sie die folgenden Berechtigungen festlegen:

  • Das benutzerdefinierte Dienstkonto muss die Berechtigung haben, in die jeweilige BigQuery-Tabelle zu schreiben und die Tabellenmetadaten zu lesen.
  • Der Pub/Sub-Dienst-Agent muss die Berechtigung iam.serviceAccounts.getAccessToken für das benutzerdefinierte Dienstkonto haben.
  • Der Nutzer, der das Abo erstellt, muss die Berechtigung iam.serviceAccounts.actAs für das benutzerdefinierte Dienstkonto haben.

So erstellen Sie das Dienstkonto und erteilen Berechtigungen:

  1. Benutzerdefiniertes Dienstkonto erstellen Das Dienstkonto muss sich im selben Projekt wie das Abo befinden.

  2. Weisen Sie dem benutzerdefinierten Dienstkonto die Rolle „BigQuery-Datenbearbeiter“ (roles/bigquery.dataEditor) zu.

    Sie können die Dienstkontoberechtigung für eine einzelne Tabelle im Projekt oder für alle Tabellen im Projekt erteilen. Eine Anleitung dazu finden Sie im entsprechenden Abschnitt unter BigQuery-Rollen dem Pub/Sub-Dienst-Agent zuweisen. Ersetzen Sie im Verfahren die E-Mail-Adresse des Pub/Sub-Dienst-Agents durch die E-Mail-Adresse des benutzerdefinierten Dienstkontos.

  3. Weisen Sie dem Pub/Sub-Dienst-Agent die Berechtigung iam.serviceAccounts.getAccessToken für das benutzerdefinierte Dienstkonto oder für alle Dienstkonten im Projekt zu. Sie können diese Berechtigung erteilen, indem Sie dem Pub/Sub-Dienst-Agent die Rolle roles/iam.serviceAccountTokenCreator zuweisen.

    Wählen Sie die geeignete Methode entsprechend Ihren Anforderungen aus.

Dienstkonto

  1. Rufen Sie in der Google Cloud Console die Seite Dienstkonten auf.

    Zur Seite „Dienstkonten“

  2. Geben Sie den Namen des benutzerdefinierten Dienstkontos in den Filter ein.

  3. Wählen Sie das Dienstkonto aus der Liste aus.

  4. Klicken Sie auf Hauptkonten mit Zugriff.

  5. Klicken Sie auf Zugriff erlauben.

  6. Geben Sie im Bereich Hauptkonten hinzufügen den Namen Ihres Pub/Sub-Dienst-Agents für das Projekt mit dem Abo ein. Der Dienst-Agent hat das Format service-project-number@gcp-sa-pubsub.iam.gserviceaccount.com. Für ein Projekt mit project-number=112233445566 hat der Dienst-Agent beispielsweise das Format service-112233445566@gcp-sa-pubsub.iam.gserviceaccount.com.

  7. Geben Sie im Drop-down-Menü Rolle auswählen Service Account ein und wählen Sie die Rolle Ersteller von Dienstkonto-Tokens aus.

  8. Klicken Sie auf Speichern.

Projekt

  1. Rufen Sie in der Google Cloud Console die Seite IAM auf.

    IAM aufrufen

  2. Klicken Sie auf Zugriff erlauben.

  3. Geben Sie im Abschnitt Hauptkonten hinzufügen den Namen Ihres benutzerdefinierten Dienstkontos ein.

  4. Klicken Sie im Bereich Rollen zuweisen auf Weitere Rolle hinzufügen.

  5. Geben Sie im Drop-down-Menü Rolle auswählen Service Account ein und wählen Sie die Rolle Ersteller von Dienstkonto-Tokens aus.

  6. Klicken Sie auf Speichern.

Wenn Sie das benutzerdefinierte Dienstkonto erstellt haben, sollten Sie bereits die erforderliche Berechtigung iam.serviceAccounts.actAs haben. So gewähren Sie einer anderen Person die Berechtigung für das Dienstkonto:

  1. Rufen Sie in der Google Cloud Console die Seite Dienstkonten auf.

    Zur Seite „Dienstkonten“

  2. Geben Sie den Namen des benutzerdefinierten Dienstkontos in den Filter ein.

  3. Wählen Sie das Dienstkonto aus der Liste aus.

  4. Klicken Sie auf Hauptkonten mit Zugriff.

  5. Klicken Sie auf Zugriff erlauben.

  6. Geben Sie im Bereich Hauptkonten hinzufügen den Namen des Kontos ein, dem Sie Zugriff gewähren möchten.

  7. Geben Sie im Drop-down-Menü Rolle auswählen Service Account ein und wählen Sie die Rolle Dienstkontonutzer aus.

  8. Wenn Ihre BigQuery-Tabelle eine Apache Iceberg-Tabelle ist, gewähren Sie dem Pub/Sub-Dienstkonto außerdem die Rolle Storage-Administrator (roles/storage.admin), um auf den Cloud Storage-Bucket zuzugreifen.

  9. Klicken Sie auf Speichern.

Eigenschaften von BigQuery-Abos

Wenn Sie ein BigQuery-Abo konfigurieren, können Sie die folgenden Attribute angeben.

Allgemeine Eigenschaften

Weitere Informationen zu den allgemeinen Abo-Eigenschaften, die Sie für alle Abos festlegen können.

Schema des Themas verwenden

Mit dieser Option kann Pub/Sub das Schema des Pub/Sub-Themas verwenden, an das das Abo angehängt ist. Außerdem schreibt Pub/Sub die Felder in Nachrichten in die entsprechenden Spalten in der BigQuery-Tabelle.

Wenn Sie diese Option verwenden, müssen Sie die folgenden zusätzlichen Anforderungen erfüllen:

  • Die Felder im Themenschema und im BigQuery-Schema müssen dieselben Namen haben und ihre Typen müssen miteinander kompatibel sein.

  • Alle optionalen Felder im Schema des Themas müssen auch im BigQuery-Schema optional sein.

  • Erforderliche Felder im Schema des Themas müssen nicht im BigQuery-Schema erforderlich sein.

  • Wenn BigQuery-Felder vorhanden sind, die nicht im Themenschema enthalten sind, müssen diese BigQuery-Felder den Modus NULLABLE haben.

  • Wenn das Schema des Themas zusätzliche Felder enthält, die nicht im BigQuery-Schema vorhanden sind und gelöscht werden können, wählen Sie die Option Unbekannte Felder löschen aus.

  • Sie können nur eines der Abo-Attribute auswählen: Themenschema verwenden oder Tabellenschema verwenden.

Wenn Sie die Option Schema des Themas verwenden oder Tabellenschema verwenden nicht auswählen, muss die BigQuery-Tabelle eine Spalte namens data vom Typ BYTES, STRING oder JSON enthalten. Pub/Sub schreibt die Nachricht in diese BigQuery-Spalte.

Änderungen am Schema des Pub/Sub-Themas oder der BigQuery-Tabelle werden möglicherweise nicht sofort in Nachrichten wirksam, die in die BigQuery-Tabelle geschrieben werden. Wenn beispielsweise die Option Unbekannte Felder löschen aktiviert ist und ein Feld im Pub/Sub-Schema, aber nicht im BigQuery-Schema vorhanden ist, enthalten Nachrichten, die in die BigQuery-Tabelle geschrieben werden, das Feld möglicherweise auch nach dem Hinzufügen zum BigQuery-Schema nicht. Schließlich werden die Schemas synchronisiert und nachfolgende Nachrichten enthalten das Feld.

Wenn Sie die Option Themenschema verwenden für Ihr BigQuery-Abo verwenden, können Sie auch BigQuery Change Data Capture (CDC) nutzen. CDC aktualisiert Ihre BigQuery-Tabellen durch Verarbeitung und Anwendung von Änderungen auf vorhandene Zeilen.

Weitere Informationen zu dieser Funktion finden Sie unter Tabellenaktualisierungen mit Change Data Capture streamen.

Informationen zur Verwendung dieses Features mit BigQuery-Abos finden Sie unter BigQuery Change Data Capture.

Schema der Tabelle verwenden

Mit dieser Option kann Pub/Sub das Schema der BigQuery-Tabelle verwenden, um die Felder einer JSON-Nachricht in die entsprechenden Spalten zu schreiben. Wenn Sie diese Option verwenden, müssen Sie die folgenden zusätzlichen Anforderungen erfüllen:

  • Die Namen der einzelnen Spalten in der BigQuery-Tabelle dürfen nur Buchstaben (a–z, A–Z), Ziffern (0–9) und Unterstriche (_) enthalten.

  • Veröffentlichte Nachrichten müssen im JSON-Format vorliegen.

    Wenn eine BigQuery-Tabellenspalte den Datentyp JSON hat, muss das entsprechende Feld in Ihrer Pub/Sub-Nachricht gültiges JSON in einem maskierten String sein. Für eine Spalte mit dem Namen myData muss das Nachrichtenfeld beispielsweise "myData": "{\"key\":\"value\"}" lauten. BigQuery lehnt Nachrichten ab, die kein gültiges JSON enthalten.

  • Die folgenden JSON-Konvertierungen werden unterstützt:

    JSON-Typ BigQuery-Datentyp
    string NUMERIC, BIGNUMERIC, DATE, TIME, DATETIME oder TIMESTAMP
    number NUMERIC, BIGNUMERIC, DATE, TIME, DATETIME oder TIMESTAMP
    • Wenn Sie number für DATE-, DATETIME-, TIME- oder TIMESTAMP-Conversions verwenden, muss die Zahl den unterstützten Darstellungen entsprechen.
    • Bei der Konvertierung von number in NUMERIC oder BIGNUMERIC sind die Genauigkeit und der Wertebereich auf die Werte beschränkt, die vom IEEE 754-Standard für Gleitkommaarithmetik akzeptiert werden. Wenn Sie eine hohe Genauigkeit oder einen größeren Wertebereich benötigen, verwenden Sie stattdessen string- bis NUMERIC- oder BIGNUMERIC-Conversions.
    • Wenn Sie string- in NUMERIC- oder BIGNUMERIC-Conversions verwenden, geht Pub/Sub davon aus, dass der String eine für Menschen lesbare Zahl ist (z.B. "123.124"). Wenn die Verarbeitung des Strings als für Menschen lesbare Zahl fehlschlägt, behandelt Pub/Sub den String als Byte, die mit dem BigDecimalByteStringEncoder codiert wurden.
  • Wenn dem Thema des Abos ein Schema zugeordnet ist, muss die Eigenschaft für die Nachrichtencodierung auf JSON festgelegt werden.

  • Wenn BigQuery-Felder vorhanden sind, die nicht in den Nachrichten enthalten sind, müssen diese BigQuery-Felder den Modus NULLABLE haben.

  • Wenn die Nachrichten zusätzliche Felder enthalten, die nicht im BigQuery-Schema vorhanden sind und gelöscht werden können, wählen Sie die Option Unbekannte Felder löschen aus.

  • Sie können nur eines der Abo-Attribute auswählen: Themenschema verwenden oder Tabellenschema verwenden.

Wenn Sie die Option Schema des Themas verwenden oder Tabellenschema verwenden nicht auswählen, muss die BigQuery-Tabelle eine Spalte namens data vom Typ BYTES, STRING oder JSON enthalten. Pub/Sub schreibt die Nachricht in diese BigQuery-Spalte.

Änderungen am BigQuery-Tabellenschema werden möglicherweise nicht sofort auf Nachrichten angewendet, die in die BigQuery-Tabelle geschrieben werden. Wenn beispielsweise die Option Unbekannte Felder löschen aktiviert ist und ein Feld in den Nachrichten, aber nicht im BigQuery-Schema vorhanden ist, enthalten Nachrichten, die in die BigQuery-Tabelle geschrieben werden, das Feld möglicherweise auch nach dem Hinzufügen zum BigQuery-Schema nicht. Schließlich wird das Schema synchronisiert und nachfolgende Nachrichten enthalten das Feld.

Wenn Sie die Option Tabellenschema verwenden für Ihr BigQuery-Abo verwenden, können Sie auch BigQuery Change Data Capture (CDC) nutzen. CDC aktualisiert Ihre BigQuery-Tabellen durch Verarbeitung und Anwendung von Änderungen auf vorhandene Zeilen.

Weitere Informationen zu dieser Funktion finden Sie unter Tabellenaktualisierungen mit Change Data Capture streamen.

Informationen zur Verwendung dieses Features mit BigQuery-Abos finden Sie unter BigQuery Change Data Capture.

Unbekannte Felder löschen

Diese Option wird mit der Option Schema des Themas verwenden oder Schema der Tabelle verwenden verwendet. Wenn diese Option aktiviert ist, kann Pub/Sub alle Felder löschen, die im Schema des Themas oder in der Nachricht, aber nicht im BigQuery-Schema vorhanden sind. Die Felder, die nicht Teil des BigQuery-Schemas sind, werden beim Schreiben der Nachricht in die BigQuery-Tabelle gelöscht.

Wenn Unbekannte Felder löschen nicht festgelegt ist, werden Nachrichten mit zusätzlichen Feldern nicht in BigQuery geschrieben und verbleiben im Abo-Rückstand, sofern Sie kein Thema für unzustellbare Nachrichten konfigurieren.

Die Einstellung Unbekannte Felder verwerfen hat keine Auswirkungen auf Felder, die weder im Pub/Sub-Themaschema noch im BigQuery-Tabellenschema definiert sind. In diesem Fall wird eine gültige Pub/Sub-Nachricht an das Abo gesendet. Da in BigQuery jedoch keine Spalten für diese zusätzlichen Felder definiert sind, werden sie während des BigQuery-Schreibvorgangs verworfen. Um dieses Verhalten zu verhindern, muss jedes Feld, das in der Pub/Sub-Nachricht enthalten ist, auch im BigQuery-Tabellenschema enthalten sein.

Das Verhalten in Bezug auf zusätzliche Felder kann auch vom jeweiligen Schematyp (Avro, Protocol Buffer) und der verwendeten Codierung (JSON, Binär) abhängen. Informationen dazu, wie sich diese Faktoren auf die Verarbeitung zusätzlicher Felder auswirken, finden Sie in der Dokumentation für Ihren spezifischen Schematyp und Ihre spezifische Codierung.

Metadaten schreiben

Mit dieser Option kann Pub/Sub die Metadaten jeder Nachricht in zusätzliche Spalten in der BigQuery-Tabelle schreiben. Andernfalls werden die Metadaten nicht in die BigQuery-Tabelle geschrieben.

Wenn Sie die Option Metadaten schreiben auswählen, muss die BigQuery-Tabelle die in der folgenden Tabelle beschriebenen Felder enthalten.

Wenn Sie die Option Metadaten schreiben nicht auswählen, ist für die BigQuery-Tabelle nur das Feld data erforderlich, es sei denn, use_topic_schema ist wahr. Wenn Sie sowohl die Option Metadaten schreiben als auch Schema des Themas verwenden auswählen, darf das Schema des Themas keine Felder mit Namen enthalten, die mit denen der Metadatenparameter übereinstimmen. Diese Einschränkung gilt auch für CamelCase-Versionen dieser SnakeCase-Parameter.

Parameter
subscription_name

STRING

Name eines Abos.

message_id

STRING

ID einer Nachricht

publish_time

TIMESTAMP

Der Zeitpunkt der Veröffentlichung einer Nachricht.

data

BYTES, STRING oder JSON

Der Inhalt der Nachricht.

Das Feld data ist für alle BigQuery-Zieltabelle erforderlich, für die nicht Schema des Themas verwenden oder Tabellenschema verwenden ausgewählt ist. Wenn das Feld vom Typ JSON ist, muss der Nachrichtentext gültiges JSON sein.

attributes

STRING oder JSON

Ein JSON-Objekt mit allen Nachrichtenattributen. Sie enthält auch zusätzliche Felder, die Teil der Pub/Sub-Nachricht sind, einschließlich des Sortierschlüssels, sofern vorhanden.

BigQuery-Abo erstellen

So erstellen Sie ein Abo mit BigQuery-Zustellung:

Console

  1. Rufen Sie in der Google Cloud Console die Seite Abo erstellen auf.

    Zu den Abos

  2. Geben Sie im Feld Abo-ID einen Namen ein. Informationen zum Benennen eines Abos finden Sie unter Richtlinien für die Benennung eines Themas oder Abos.

  3. Geben Sie im Feld Cloud Pub/Sub-Thema auswählen das Thema ein, von dem Nachrichten empfangen werden sollen, oder wählen Sie es aus.

  4. Wählen Sie als Zustellungstyp die Option In BigQuery schreiben aus.

  5. Wählen Sie die BigQuery-Tabelle aus:

    1. Wählen Sie unter Projekt das Google Cloud -Projekt aus, das die BigQuery-Tabelle enthält.

    2. Wählen Sie unter Dataset ein vorhandenes Dataset aus oder klicken Sie auf Neues Dataset erstellen, um ein neues Dataset zu erstellen. Informationen zum Erstellen eines Datasets finden Sie unter Datasets erstellen.

    3. Geben Sie im Feld Tabelle den Namen der Tabelle ein. Wenn Sie eine neue Tabelle erstellen möchten, klicken Sie auf den Link, der Sie zur Seite Neue Tabelle erstellen in BigQuery weiterleitet. Die Seite wird in einem separaten Tab geöffnet. Informationen zum Erstellen einer Tabelle finden Sie unter Tabellen erstellen und verwenden.

  6. Wählen Sie für Schemakonfiguration eine der folgenden Optionen aus:

    • Kein Schema verwenden Pub/Sub schreibt die Nachrichtenbyte in eine Spalte mit dem Namen data.

    • Schema des Themas verwenden Pub/Sub verwendet das Schema, das dem Thema zugeordnet ist. Weitere Informationen finden Sie unter Themenschema verwenden.

    • Tabellenschema verwenden: Pub/Sub verwendet das Schema der BigQuery-Tabelle. Weitere Informationen finden Sie unter Tabellenschema verwenden.

  7. Optional. Wenn Sie Nachrichtenmetadaten in die BigQuery-Tabelle schreiben möchten, wählen Sie Metadaten schreiben aus. Weitere Informationen finden Sie unter Metadaten schreiben.

  8. Optional. Wenn Sie Felder löschen möchten, die nicht im BigQuery-Tabellenschema vorhanden sind, wählen Sie Unbekannte Felder löschen aus. Weitere Informationen finden Sie unter Unbekannte Felder entfernen.

  9. Konfigurieren Sie die allgemeinen Abonnementeigenschaften nach Bedarf. Wir empfehlen dringend, Dead Lettering zu aktivieren, um Nachrichtenfehler zu beheben. Weitere Informationen finden Sie unter Thema für unzustellbare Nachrichten.

  10. Klicken Sie auf Erstellen.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Verwenden Sie den Befehl gcloud pubsub subscriptions create, um ein Pub/Sub-Abo zu erstellen:

    gcloud pubsub subscriptions create SUBSCRIPTION_ID \
        --topic=TOPIC_ID \
        --bigquery-table=PROJECT_ID.DATASET_ID.TABLE_ID
    

    Wenn Sie ein benutzerdefiniertes Dienstkonto verwenden möchten, geben Sie es als zusätzliches Argument an:

    gcloud pubsub subscriptions create SUBSCRIPTION_ID \
        --topic=TOPIC_ID \
        --bigquery-table=PROJECT_ID.DATASET_ID.TABLE_ID \
        --bigquery-service-account-email=SERVICE_ACCOUNT_NAME
    

    Ersetzen Sie Folgendes:

    • SUBSCRIPTION_ID: Gibt die ID des Abos an.
    • TOPIC_ID: Gibt die ID des Themas an. Für das Thema ist ein Schema erforderlich.
    • PROJECT_ID: Gibt die ID des Projekts an.
    • DATASET_ID: Gibt die ID eines vorhandenen Datasets an. Informationen zum Erstellen eines Datasets finden Sie unter Datasets erstellen.
    • TABLE_ID: Gibt die ID einer vorhandenen Tabelle an. Die Tabelle erfordert ein Feld data, wenn Ihr Thema kein Schema hat. Informationen zum Erstellen einer Tabelle finden Sie unter Leere Tabelle mit einer Schemadefinition erstellen.
    • SERVICE_ACCOUNT_NAME: Gibt den Namen des Dienstkontos an, das zum Schreiben in BigQuery verwendet werden soll.
  3. C++

    Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für C++ in der Kurzanleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub C++ API.

    namespace pubsub = ::google::cloud::pubsub;
    namespace pubsub_admin = ::google::cloud::pubsub_admin;
    [](pubsub_admin::SubscriptionAdminClient client,
       std::string const& project_id, std::string const& topic_id,
       std::string const& subscription_id, std::string const& table_id) {
      google::pubsub::v1::Subscription request;
      request.set_name(
          pubsub::Subscription(project_id, subscription_id).FullName());
      request.set_topic(pubsub::Topic(project_id, topic_id).FullName());
      request.mutable_bigquery_config()->set_table(table_id);
      auto sub = client.CreateSubscription(request);
      if (!sub) {
        if (sub.status().code() == google::cloud::StatusCode::kAlreadyExists) {
          std::cout << "The subscription already exists\n";
          return;
        }
        throw std::move(sub).status();
      }
    
      std::cout << "The subscription was successfully created: "
                << sub->DebugString() << "\n";
    }

    C#

    Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für C# in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zu Pub/Sub C# API.

    
    using Google.Cloud.PubSub.V1;
    
    public class CreateBigQuerySubscriptionSample
    {
        public Subscription CreateBigQuerySubscription(string projectId, string topicId, string subscriptionId, string bigqueryTableId)
        {
            SubscriberServiceApiClient subscriber = SubscriberServiceApiClient.Create();
            TopicName topicName = TopicName.FromProjectTopic(projectId, topicId);
            SubscriptionName subscriptionName = SubscriptionName.FromProjectSubscription(projectId, subscriptionId);
    
            var subscriptionRequest = new Subscription
            {
                SubscriptionName = subscriptionName,
                TopicAsTopicName = topicName,
                BigqueryConfig = new BigQueryConfig
                {
                    Table = bigqueryTableId
                }
            };
            var subscription = subscriber.CreateSubscription(subscriptionRequest);
            return subscription;
        }
    }

    Go

    Im folgenden Beispiel wird die Hauptversion der Go Pub/Sub-Clientbibliothek (v2) verwendet. Wenn Sie noch die v1-Bibliothek verwenden, finden Sie hier den Migrationsleitfaden für v2. Eine Liste der Codebeispiele für Version 1 finden Sie unter Eingestellte Codebeispiele.

    Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für Go in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zu Pub/Sub Go API.

    import (
    	"context"
    	"fmt"
    	"io"
    
    	"cloud.google.com/go/pubsub/v2"
    	"cloud.google.com/go/pubsub/v2/apiv1/pubsubpb"
    )
    
    // createBigQuerySubscription creates a Pub/Sub subscription that exports messages to BigQuery.
    func createBigQuerySubscription(w io.Writer, projectID, topic, subscription, table string) error {
    	// projectID := "my-project"
    	// topic := "projects/my-project-id/topics/my-topic"
    	// subscription := "projects/my-project/subscriptions/my-sub"
    	// table := "my-project-id.dataset_id.table_id"
    	ctx := context.Background()
    	client, err := pubsub.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("pubsub.NewClient: %w", err)
    	}
    	defer client.Close()
    
    	sub, err := client.SubscriptionAdminClient.CreateSubscription(ctx, &pubsubpb.Subscription{
    		Name:  subscription,
    		Topic: topic,
    		BigqueryConfig: &pubsubpb.BigQueryConfig{
    			Table:         table,
    			WriteMetadata: true,
    		},
    	})
    	if err != nil {
    		return fmt.Errorf("failed to create subscription: %w", err)
    	}
    	fmt.Fprintf(w, "Created BigQuery subscription: %v\n", sub)
    
    	return nil
    }
    

    Java

    Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für Java in der Kurzanleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zu Pub/Sub Java API.

    import com.google.cloud.pubsub.v1.SubscriptionAdminClient;
    import com.google.pubsub.v1.BigQueryConfig;
    import com.google.pubsub.v1.ProjectSubscriptionName;
    import com.google.pubsub.v1.ProjectTopicName;
    import com.google.pubsub.v1.Subscription;
    import java.io.IOException;
    
    public class CreateBigQuerySubscriptionExample {
      public static void main(String... args) throws Exception {
        // TODO(developer): Replace these variables before running the sample.
        String projectId = "your-project-id";
        String topicId = "your-topic-id";
        String subscriptionId = "your-subscription-id";
        String bigqueryTableId = "your-project.your-dataset.your-table";
    
        createBigQuerySubscription(projectId, topicId, subscriptionId, bigqueryTableId);
      }
    
      public static void createBigQuerySubscription(
          String projectId, String topicId, String subscriptionId, String bigqueryTableId)
          throws IOException {
        try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
    
          ProjectTopicName topicName = ProjectTopicName.of(projectId, topicId);
          ProjectSubscriptionName subscriptionName =
              ProjectSubscriptionName.of(projectId, subscriptionId);
    
          BigQueryConfig bigqueryConfig =
              BigQueryConfig.newBuilder().setTable(bigqueryTableId).setWriteMetadata(true).build();
    
          Subscription subscription =
              subscriptionAdminClient.createSubscription(
                  Subscription.newBuilder()
                      .setName(subscriptionName.toString())
                      .setTopic(topicName.toString())
                      .setBigqueryConfig(bigqueryConfig)
                      .build());
    
          System.out.println("Created a BigQuery subscription: " + subscription.getAllFields());
        }
      }
    }

    Node.js

    Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für PHP in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zu Pub/Sub Node.js API.

    /**
     * TODO(developer): Uncomment these variables before running the sample.
     */
    // const topicNameOrId = 'YOUR_TOPIC_NAME_OR_ID';
    // const subscriptionNameOrId = 'YOUR_SUBSCRIPTION_NAME_OR_ID';
    // const bigqueryTableId = 'YOUR_TABLE_ID';
    
    // Imports the Google Cloud client library
    const {PubSub} = require('@google-cloud/pubsub');
    
    // Creates a client; cache this for further use
    const pubSubClient = new PubSub();
    
    async function createBigQuerySubscription(
      topicNameOrId,
      subscriptionNameOrId,
      bigqueryTableId,
    ) {
      const options = {
        bigqueryConfig: {
          table: bigqueryTableId,
          writeMetadata: true,
        },
      };
    
      await pubSubClient
        .topic(topicNameOrId)
        .createSubscription(subscriptionNameOrId, options);
    
      console.log(`Subscription ${subscriptionNameOrId} created.`);
    }

    Node.ts

    Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für PHP in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zu Pub/Sub Node.js API.

    /**
     * TODO(developer): Uncomment these variables before running the sample.
     */
    // const topicNameOrId = 'YOUR_TOPIC_NAME_OR_ID';
    // const subscriptionNameOrId = 'YOUR_SUBSCRIPTION_NAME_OR_ID';
    // const bigqueryTableId = 'YOUR_TABLE_ID';
    
    // Imports the Google Cloud client library
    import {PubSub, CreateSubscriptionOptions} from '@google-cloud/pubsub';
    
    // Creates a client; cache this for further use
    const pubSubClient = new PubSub();
    
    async function createBigQuerySubscription(
      topicNameOrId: string,
      subscriptionNameOrId: string,
      bigqueryTableId: string,
    ) {
      const options: CreateSubscriptionOptions = {
        bigqueryConfig: {
          table: bigqueryTableId,
          writeMetadata: true,
        },
      };
    
      await pubSubClient
        .topic(topicNameOrId)
        .createSubscription(subscriptionNameOrId, options);
    
      console.log(`Subscription ${subscriptionNameOrId} created.`);
    }

    PHP

    Folgen Sie der Einrichtungsanleitung für PHP unter Schnellstart: Clientbibliotheken verwenden, bevor Sie dieses Beispiel ausprobieren. Weitere Informationen finden Sie in der Referenzdokumentation zur PHP-API von Pub/Sub.

    use Google\Cloud\PubSub\PubSubClient;
    use Google\Cloud\PubSub\V1\BigQueryConfig;
    
    /**
     * Creates a Pub/Sub BigQuery subscription.
     *
     * @param string $projectId  The Google project ID.
     * @param string $topicName  The Pub/Sub topic name.
     * @param string $subscriptionName  The Pub/Sub subscription name.
     * @param string $table      The BigQuery table to which to write.
     */
    function create_bigquery_subscription($projectId, $topicName, $subscriptionName, $table)
    {
        $pubsub = new PubSubClient([
            'projectId' => $projectId,
        ]);
        $topic = $pubsub->topic($topicName);
        $subscription = $topic->subscription($subscriptionName);
        $config = new BigQueryConfig(['table' => $table]);
        $subscription->create([
            'bigqueryConfig' => $config
        ]);
    
        printf('Subscription created: %s' . PHP_EOL, $subscription->name());
    }

    Python

    Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für Python in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zu Pub/Sub Python API.

    from google.cloud import pubsub_v1
    
    # TODO(developer)
    # project_id = "your-project-id"
    # topic_id = "your-topic-id"
    # subscription_id = "your-subscription-id"
    # bigquery_table_id = "your-project.your-dataset.your-table"
    
    publisher = pubsub_v1.PublisherClient()
    subscriber = pubsub_v1.SubscriberClient()
    topic_path = publisher.topic_path(project_id, topic_id)
    subscription_path = subscriber.subscription_path(project_id, subscription_id)
    
    bigquery_config = pubsub_v1.types.BigQueryConfig(
        table=bigquery_table_id, write_metadata=True
    )
    
    # Wrap the subscriber in a 'with' block to automatically call close() to
    # close the underlying gRPC channel when done.
    with subscriber:
        subscription = subscriber.create_subscription(
            request={
                "name": subscription_path,
                "topic": topic_path,
                "bigquery_config": bigquery_config,
            }
        )
    
    print(f"BigQuery subscription created: {subscription}.")
    print(f"Table for subscription is: {bigquery_table_id}")

    Ruby

    Im folgenden Beispiel wird die Ruby-Pub/Sub-Clientbibliothek v3 verwendet. Wenn Sie noch die v2-Bibliothek verwenden, finden Sie hier die Migrationsanleitung für v3. Eine Liste der Ruby v2-Codebeispiele finden Sie unter eingestellte Codebeispiele.

    Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für Ruby in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zu Pub/Sub Ruby API.

    # project_id = "your-project-id"
    # topic_id = "your-topic-id"
    # subscription_id = "your-subscription-id"
    # bigquery_table_id = "my-project:dataset-id.table-id"
    
    pubsub = Google::Cloud::PubSub.new project_id: project_id
    subscription_admin = pubsub.subscription_admin
    
    subscription = subscription_admin.create_subscription \
      name: pubsub.subscription_path(subscription_id),
      topic: pubsub.topic_path(topic_id),
      bigquery_config: {
        table: bigquery_table_id,
        write_metadata: true
      }
    
    puts "BigQuery subscription created: #{subscription_id}."
    puts "Table for subscription is: #{bigquery_table_id}"

BigQuery-Abo überwachen

Cloud Monitoring bietet eine Reihe von Messwerten zum Beobachten von Abos.

Eine Liste aller verfügbaren Messwerte für Pub/Sub und deren Beschreibungen finden Sie in der Monitoring-Dokumentation für Pub/Sub.

Sie können Abos auch in Pub/Sub überwachen.

Nächste Schritte