Daten nach Pub/Sub exportieren (Reverse ETL)

In diesem Dokument wird beschrieben, wie Sie RETL (Reverse Extract-Transform-Load) von BigQuery nach Pub/Sub einrichten. Dazu können Sie die Anweisung EXPORT DATA in einer kontinuierlichen Abfrage verwenden, um Daten aus BigQuery in ein Pub/Sub-Thema zu exportieren.

Sie können einen RETL-Workflow für Pub/Sub verwenden, um die Analysefunktionen von BigQuery mit dem asynchronen und skalierbaren globalen Messaging-Dienst von Pub/Sub zu kombinieren. Mit diesem Workflow können Sie Daten ereignisgesteuert für nachgelagerte Anwendungen und Dienste bereitstellen.

Vorbereitung

Sie müssen ein Dienstkonto erstellen. Ein Dienstkonto ist erforderlich, um eine kontinuierliche Abfrage auszuführen, die Ergebnisse in ein Pub/Sub-Thema exportiert.

Sie müssen ein Pub/Sub-Thema erstellen, um die kontinuierlichen Abfrageergebnisse als Nachrichten zu erhalten, und ein Pub/Sub-Abo, das die Zielanwendung zum Empfangen dieser Nachrichten verwenden kann.

Erforderliche Rollen

Dieser Abschnitt enthält Informationen zu den Rollen und Berechtigungen, die für das Nutzerkonto erforderlich sind, mit dem die kontinuierliche Abfrage erstellt wird, sowie zum Dienstkonto, das die kontinuierliche Abfrage ausführt.

Nutzerkontoberechtigungen

Zum Erstellen eines Jobs in BigQuery muss das Nutzerkonto die IAM-Berechtigung bigquery.jobs.create haben. Jede der folgenden IAM-Rollen gewährt die Berechtigung bigquery.jobs.create:

Zum Senden eines Jobs, der mit einem Dienstkonto ausgeführt wird, muss das Nutzerkonto die Rolle Dienstkontonutzer (roles/iam.serviceAccountUser) haben. Wenn Sie dasselbe Nutzerkonto zum Erstellen des Dienstkontos verwenden, muss das Nutzerkonto die Rolle Service Account Admin (roles/iam.serviceAccountAdmin) haben. Informationen zum Beschränken des Zugriffs eines Nutzers auf ein einzelnes Dienstkonto und nicht auf alle Dienstkonten innerhalb eines Projekts finden Sie unter Einzelne Rolle zuweisen.

Wenn das Nutzerkonto die APIs aktivieren muss, die für Ihren Anwendungsfall mit kontinuierlichen Abfragen erforderlich sind, muss das Nutzerkonto die Rolle Service Usage Admin (roles/serviceusage.serviceUsageAdmin) haben.

Dienstkontoberechtigungen

Zum Exportieren von Daten aus einer BigQuery-Tabelle muss das Dienstkonto die IAM-Berechtigung bigquery.tables.export haben. Jede der folgenden IAM-Rollen gewährt die Berechtigung bigquery.tables.export:

Damit das Dienstkonto auf Pub/Sub zugreifen kann, müssen Sie dem Dienstkonto die beiden folgenden IAM-Rollen zuweisen:

Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen erhalten.

Hinweise

Enable the BigQuery and Pub/Sub APIs.

Enable the APIs

Nach Pub/Sub exportieren

Verwenden Sie die Anweisung EXPORT DATA, um Daten in ein Pub/Sub-Thema zu exportieren:

Console

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. Klicken Sie im Abfrageeditor auf Mehr > Abfrageeinstellungen.

  3. Klicken Sie im Bereich Kontinuierliche Abfrage das Kästchen Modus für kontinuierliche Abfragen verwenden an.

  4. Wählen Sie im Feld Dienstkonto das erstellte Dienstkonto aus.

  5. Klicken Sie auf Speichern.

  6. Geben Sie im Abfrageeditor die folgende Anweisung ein:

    EXPORT DATA
    OPTIONS (
    format = 'CLOUD_PUBSUB',
    uri = 'https://pubsub.googleapis.com/projects/PROJECT_ID/topics/TOPIC_ID'
    ) AS
    (
    QUERY
    );
    

    Dabei gilt:

    • PROJECT_ID: Ihre Projekt-ID.
    • TOPIC_ID: die Pub/Sub-Themen-ID Sie finden die Themen-ID auf der Seite Themen in der Google Cloud Console.
    • QUERY: die SQL-Anweisung zum Auswählen der zu exportierenden Daten. Die SQL-Anweisung darf nur unterstützte Vorgänge enthalten.
  7. Klicken Sie auf Ausführen.

bq

  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. Führen Sie in der Befehlszeile die kontinuierliche Abfrage mit dem Befehl bq query und den folgenden Flags aus:

    • Setzen Sie das Flag --continuous auf true, um die Abfrage kontinuierlich zu machen.
    • Verwenden Sie das Flag --connection_property, um das zu verwendende Dienstkonto anzugeben.
    bq query --project_id=PROJECT_ID --use_legacy_sql=false \
    --continuous=true --connection_property=service_account=SERVICE_ACCOUNT_EMAIL \
    'EXPORT DATA OPTIONS (format = "CLOUD_PUBSUB", uri = "https://pubsub.googleapis.com/projects/PROJECT_ID/topics/TOPIC_ID") AS (QUERY);'
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: Ihre Projekt-ID.
    • SERVICE_ACCOUNT_EMAIL: die E-Mail-Adresse des Dienstkontos. Sie können die E-Mail-Adresse des Dienstkontos auf der Seite Dienstkonten in der Google Cloud Console abrufen.
    • QUERY: die SQL-Anweisung zum Auswählen der zu exportierenden Daten. Die SQL-Anweisung darf nur unterstützte Vorgänge enthalten.

API

  1. Führen Sie die kontinuierliche Abfrage aus, indem Sie die Methode jobs.insert aufrufen. Legen Sie die folgenden Felder in der Ressource JobConfigurationQuery der Ressource Job fest, die Sie übergeben:

    • Setzen Sie das Feld continuous auf true, um die Abfrage kontinuierlich zu machen.
    • Verwenden Sie das Feld connection_property, um das zu verwendende Dienstkonto anzugeben.
    curl --request POST \
      'https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/jobs'
      --header 'Authorization: Bearer $(gcloud auth print-access-token) \
      --header 'Accept: application/json' \
      --header 'Content-Type: application/json' \
      --data '("configuration":("query":"EXPORT DATA OPTIONS (format = 'CLOUD_PUBSUB', uri = 'https://pubsub.googleapis.com/projects/PROJECT_ID/topics/TOPIC_ID') AS (QUERY);","useLegacySql":false,"continuous":true,"connectionProperties":["key": "service_account","value":"SERVICE_ACCOUNT_EMAIL"]))' \
      --compressed
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: Ihre Projekt-ID.
    • QUERY: die SQL-Anweisung zum Auswählen der zu exportierenden Daten. Die SQL-Anweisung darf nur unterstützte Vorgänge enthalten.
    • SERVICE_ACCOUNT_EMAIL: die E-Mail-Adresse des Dienstkontos. Sie können die E-Mail-Adresse des Dienstkontos auf der Seite Dienstkonten in der Google Cloud Console abrufen.

Mehrere Spalten nach Pub/Sub exportieren

Wenn Sie mehrere Spalten in die Ausgabe aufnehmen möchten, können Sie eine Strukturspalte erstellen, die die Spaltenwerte enthält, und den Strukturwert dann mithilfe der TO_JSON_STRING-Funktion in einen JSON-Strong konvertieren. Im folgenden Beispiel werden Daten aus vier Spalten als JSON-String formatiert:

EXPORT DATA
  OPTIONS (
    format = 'CLOUD_PUBSUB',
    uri = 'https://pubsub.googleapis.com/projects/myproject/topics/taxi-real-time-rides')
AS (
  SELECT
    TO_JSON_STRING(
      STRUCT(
        ride_id,
        timestamp,
        latitude,
        longitude)) AS message
  FROM `myproject.real_time_taxi_streaming.taxi_rides`
  WHERE ride_status = 'enroute'
);

Exportoptimierung

Wenn die Leistung Ihres kontinuierlichen Abfragejobs durch die verfügbaren Rechenressourcen eingeschränkt zu sein scheint, versuchen Sie, die Größe der BigQuery-CONTINUOUS-Slot-Reservierungszuweisung zu erhöhen.

Beschränkungen

  • Die exportierten Daten müssen aus einer einzelnen Spalte vom Typ STRING oder BYTES bestehen. Der Spaltenname kann ein beliebiger Name sein.
  • Sie müssen eine kontinuierliche Abfrage für den Export nach Pub/Sub verwenden.
  • Sie können in der kontinuierlichen Abfrage kein Schema an ein Pub/Sub-Thema übergeben.
  • Sie können keine Daten in ein Pub/Sub-Thema exportieren, das ein Schema verwendet.
  • Sie können keine Daten exportieren, die NULL-Werte enthalten. Sie können NULL-Werte aus den Abfrageergebnissen ausschließen. Nehmen Sie dazu den Filter WHERE message IS NOT NULL in die kontinuierliche Abfrage auf.
  • Exportierte Daten dürfen Pub/Sub-Kontingente nicht überschreiten.

Preise

Wenn Sie Daten in eine kontinuierliche Abfrage exportieren, erfolgt die Abrechnung nach den Preisen für die BigQuery-Kapazitätsberechnung. Zum Ausführen kontinuierlicher Abfragen benötigen Sie eine Reservierung mit dem Enterprise oder Enterprise Plus und eine Reservierungszuweisung mit dem CONTINUOUS-Jobtyp.

Nachdem die Daten exportiert wurden, wird Ihnen die Verwendung von Pub/Sub in Rechnung gestellt. Weitere Informationen finden Sie unter Preise für Cloud Pub/Sub.