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
:
- BigQuery-Nutzer (
roles/bigquery.user
) - BigQuery-Jobnutzer(
roles/bigquery.jobUser
) - BigQuery Admin (
roles/bigquery.admin
)
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
:
- BigQuery Data Viewer (
roles/bigquery.dataViewer
) - BigQuery Data Editor (
roles/bigquery.dataEditor
) - BigQuery Data Owner (
roles/bigquery.dataOwner
) - BigQuery Admin (
roles/bigquery.admin
)
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.
Nach Pub/Sub exportieren
Verwenden Sie die Anweisung EXPORT DATA
, um Daten in ein Pub/Sub-Thema zu exportieren:
Console
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Klicken Sie im Abfrageeditor auf Mehr > Abfrageeinstellungen.
Klicken Sie im Bereich Kontinuierliche Abfrage das Kästchen Modus für kontinuierliche Abfragen verwenden an.
Wählen Sie im Feld Dienstkonto das erstellte Dienstkonto aus.
Klicken Sie auf Speichern.
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.
Klicken Sie auf Ausführen.
bq
-
In the Google Cloud console, 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.
Führen Sie in der Befehlszeile die kontinuierliche Abfrage mit dem Befehl
bq query
und den folgenden Flags aus:- Setzen Sie das Flag
--continuous
auftrue
, 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.
- Setzen Sie das Flag
API
Führen Sie die kontinuierliche Abfrage aus, indem Sie die Methode
jobs.insert
aufrufen. Legen Sie die folgenden Felder in der RessourceJobConfigurationQuery
der RessourceJob
fest, die Sie übergeben:- Setzen Sie das Feld
continuous
auftrue
, 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.
- Setzen Sie das Feld
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
oderBYTES
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önnenNULL
-Werte aus den Abfrageergebnissen ausschließen. Nehmen Sie dazu den FilterWHERE 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.