Daten nach AlloyDB exportieren (Reverse ETL)

In diesem Dokument wird beschrieben, wie Sie einen Workflow für Reverse Extrahieren, Transformieren und Laden (Reverse ETL) von BigQuery nach AlloyDB for PostgreSQL einrichten. Dazu verwenden Sie die EXPORT DATA Anweisung.

Hinweis

  • Erstellen Sie einen AlloyDB-Cluster und eine Instanz mit einer Datenbank, einem Schema und einer Tabelle, um die exportierten Daten zu empfangen. Das Zielschema und die Zieltabelle müssen vorhanden sein, bevor Sie den Exportjob ausführen.

  • Die AlloyDB-Zielinstanz muss eine PRIMARY-Instanz mit dem Status READY sein.

  • Erstellen Sie eine BigQuery Verbindung, um eine Verbindung zu Ihrer AlloyDB-Instanz herzustellen. Die Verbindung muss mit einem Nutzernamen und einem Passwort authentifiziert werden. Der in der Verbindung angegebene Datenbanknutzer muss die Berechtigungen INSERT für die Zieltabelle und USAGE für das Zielschema haben.

  • Erstellen Sie eine BigQuery Enterprise- oder Enterprise Plus-Reservierung.

  • Erteilen Sie IAM-Rollen (Identity and Access Management), die Nutzern die erforderlichen Berechtigungen zum Ausführen der einzelnen Aufgaben in diesem Dokument geben.

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihr Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Exportieren von BigQuery-Daten nach AlloyDB benötigen:

  • Daten aus einer BigQuery-Tabelle exportieren: BigQuery-Datenbetrachter (roles/bigquery.dataViewer)
  • Extraktionsjob ausführen: BigQuery-Nutzer (roles/bigquery.user)
  • BigQuery-Verbindung verwenden: BigQuery-Verbindungsnutzer (roles/bigquery.connectionUser)
  • Verbindung zu einer AlloyDB-Instanz herstellen: AlloyDB-Client (roles/alloydb.client) – das Dienstkonto der Verbindung

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

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

Beschränkungen

  • AlloyDB-Exporte unterstützen nur Batch-Exporte. Sie können keine kontinuierlichen Abfragen verwenden, um Daten nach AlloyDB zu exportieren.

  • Daten, die nach AlloyDB exportiert werden, werden ausschließlich als neue Zeilen hinzugefügt. Durch den Exportvorgang werden vorhandene Datensätze in AlloyDB nicht geändert oder gelöscht. Wenn für die Zieltabelle keine PRIMARY KEY- oder UNIQUE-Einschränkungen definiert sind, führt das mehrmalige Exportieren derselben Daten zu doppelten Einträgen.

  • Um die Datenintegrität zu gewährleisten, empfehlen wir, PRIMARY KEY- oder UNIQUE-Einschränkungen für Ihre AlloyDB-Tabellen zu definieren. Bei Exportjobs werden keine „Upserts“ ausgeführt, bei denen ein vorhandener Datensatz aktualisiert wird, wenn ein eindeutiger übereinstimmender Schlüssel vorhanden ist. Wenn eine eingehende Zeile gegen eine PRIMARY KEY- oder UNIQUE-Einschränkung verstößt, schlägt der gesamte Exportjob fehl.

  • Wir empfehlen, nicht mehrere gleichzeitige EXPORT DATA-Jobs für dieselbe AlloyDB-Tabelle auszuführen. Dies kann zu unvorhersehbarem Verhalten wie Datenverlust oder Jobfehlern führen. Wir empfehlen, zu prüfen, ob jeweils nur ein Exportjob in eine bestimmte Tabelle schreibt.

  • Es wird nur die Authentifizierung mit Nutzernamen und Passwort über eine BigQuery-Verbindung unterstützt.

  • Die BigQuery-Datentypen ARRAY, BYTES, GEOGRAPHY, INTERVAL und STRUCT werden nicht unterstützt.

  • Wenn in der BigQuery-Anweisung SELECT Spalten ausgelassen werden, die in der AlloyDB-Zieltabelle vorhanden sind, müssen diese Spalten entweder NULL-Werte zulassen oder in AlloyDB müssen Standardwerte definiert sein. Wenn sie eine NOT NULL-Einschränkung haben und kein Standardwert vorhanden ist, schlägt der Export fehl.

  • Exporte nach AlloyDB werden nur für die BigQuery Enterprise- oder Enterprise Plus-Versionen unterstützt. Die BigQuery Standard-Version und On-Demand-Computing werden nicht unterstützt. Weitere Informationen finden Sie unter Verwaltungs funktionen.

  • Ein BigQuery-Job, z. B. ein Extraktionsjob nach AlloyDB, hat eine maximale Dauer von 6 Stunden. Bei sehr großen Exporten empfehlen wir, den Export in mehrere kleinere Jobs aufzuteilen.

Überlegungen zum Standort

Für den Export von Daten nach AlloyDB gelten bestimmte Anforderungen an den Standort Ihres BigQuery-Datasets und Ihrer AlloyDB-Instanz:

  • Exporte in derselben Region: Die AlloyDB-Zielinstanz muss sich in derselben Google Cloud Region wie das BigQuery Dataset befinden. Ein Dataset in us-east1 kann beispielsweise nur in eine AlloyDB-Instanz in us-east1 exportiert werden.

  • Multiregionale Exporte :

    • Datasets in der Multiregion US können nur in eine AlloyDB-Instanz in der Region us-central1 exportiert werden.
    • Datasets in der Multiregion EU können nur in eine AlloyDB-Instanz in der Region europe-west4 exportiert werden.

Regionsübergreifende Exporte, die nicht den oben genannten Kombinationen entsprechen, werden nicht unterstützt.

Exporte mit alloydb_options konfigurieren

Mit der Option alloydb_options können Sie das AlloyDB-Zielschema, die Zieltabelle und die maximale Anzahl von Verbindungen angeben. Die Konfiguration wird als JSON-String ausgedrückt. Nur der Parameter table ist erforderlich. Alle anderen Parameter sind optional.

Beim Konfigurieren des Exports müssen die Spalten in der Anweisung SELECT Aliase haben, die mit den Namen der Spalten in der AlloyDB-Zieltabelle übereinstimmen.

EXPORT DATA
  WITH CONNECTION `PROJECT_ID.LOCATION.CONNECTION_ID`
  OPTIONS(
    format='ALLOYDB',
    uri="https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_ID/instances/INSTANCE_ID",
    alloydb_options="""{
      "schema": "SCHEMA_NAME",
      "table": "TABLE_NAME",
      "max_parallel_connections": MAX_CONNECTIONS
    }"""
  )
AS SELECT * FROM `mydataset.table1`;

Ersetzen Sie Folgendes:

  • PROJECT_ID: der Name Ihres Google Cloud Projekts.
  • LOCATION: der Standort Ihrer Verbindung und Zielinstanz.
  • CONNECTION_ID: der Name Ihrer BigQuery-Verbindung.
  • CLUSTER_ID: der Name Ihres AlloyDB-Clusters.
  • INSTANCE_ID: der Name Ihrer AlloyDB-Zielinstanz.
  • SCHEMA_NAME (optional): der Name des Zielschemas in AlloyDB. Wenn nicht angegeben, wird das für den Datenbanknutzer konfigurierte Standardschema verwendet.
  • TABLE_NAME: der Name einer vorhandenen Zieltabelle in AlloyDB ohne das Schemapräfix.
  • MAX_CONNECTIONS (optional): die maximale Anzahl gleichzeitiger paralleler Verbindungen von BigQuery-Workern zur AlloyDB-Instanz. Durch das Begrenzen der Verbindungen kann eine Überlastung der Zielinstanz bei großen Exporten verhindert werden.

Daten exportieren

Mit der Anweisung EXPORT DATA können Sie Daten aus einer BigQuery-Tabelle in eine AlloyDB-Tabelle exportieren.

Im folgenden Beispiel werden ausgewählte Felder aus einer Tabelle mit dem Namen mydataset.table1 in eine AlloyDB-Tabelle mit dem Namen my_target_table exportiert:

EXPORT DATA
  WITH CONNECTION `myproject.us-central1.my-alloydb-conn`
  OPTIONS (
    format='ALLOYDB',
    uri="https://alloydb.googleapis.com/v1/projects/myproject/locations/us-central1/clusters/my-cluster/instances/my-instance",
    alloydb_options="""{
      "schema": "public",
      "table": "my_target_table"
    }"""
  )
AS SELECT
  col1 AS id,
  col2 AS name,
  col3 AS value
FROM
  `mydataset.table1`;

Preise

Wenn Sie Daten mit der Anweisung EXPORT DATA nach AlloyDB exportieren, werden Ihnen die Kosten gemäß den BigQuery-Kapazitätsrechenpreisen in Rechnung gestellt.

Nachdem die Daten exportiert wurden, wird das Speichern der Daten in AlloyDB in Rechnung gestellt. Weitere Informationen finden Sie unter AlloyDB for PostgreSQL – Preise.