BigQuery-Daten mit AlloyDB synchronisieren

Auf dieser Seite wird beschrieben, wie Sie Tabellen aus BigQuery mit Ihrer AlloyDB for PostgreSQL-Instanz synchronisieren.

Wenn Sie Analysedaten aus BigQuery mit AlloyDB synchronisieren, können Sie Betriebssysteme erstellen, die von einem transaktionalen Zugriff mit niedriger Latenz auf Ihren Data Lake profitieren. Im Gegensatz zu einem Foreign Data Wrapper (FDW) , der Daten direkt abfragt, werden bei der Synchronisierung von Tabellen die Daten zur Leistungsoptimierung in den AlloyDB-Speicher verschoben.

AlloyDB bietet die folgenden Möglichkeiten, BigQuery-Daten in Ihre Instanz zu verschieben:

  • Einmalige Synchronisierung:Erstellt eine beschreibbare, unabhängige Kopie Ihrer BigQuery-Tabelle.

  • Regelmäßige Synchronisierung (Spiegelung) : Erstellt eine schreibgeschützte lokale Tabelle, die automatisch nach einem Zeitplan aktualisiert wird, z. B. alle 6 Stunden oder täglich.

Überlegungen zu Leistung und Betrieb

Beachten Sie bei der Verwendung von BigQuery-Synchronisierungstabellen Folgendes:

  • Ressourcennutzung: Bei der Datenverschiebung werden CPU und Arbeitsspeicher genutzt. Bei sehr großen Tabellen sollten Sie Synchronisierungen außerhalb der Spitzenzeiten planen, um die primäre transaktionale Arbeitslast nicht zu beeinträchtigen.
  • Datensichtbarkeit: Bei einem Ersetzungsvorgang wird die vorhandene Zieltabelle im Voraus gelöscht und neu erstellt. Bei Abfragen während des Imports wird zuerst eine leere Tabelle angezeigt. Anschließend werden neu importierte Daten inkrementell angezeigt, wenn Batchtransaktionen ausgeführt werden.

Hinweis

  1. Machen Sie sich mit der Verarbeitung von BigQuery-Datentypen und Spaltenzuordnungen durch bigquery_fdw vertraut, da die Erweiterung alloydb_sync bigquery_fdw verwendet, um eine Verbindung zu BigQuery herzustellen.
  2. Melden Sie sich in Ihrem Google Cloud Konto an. Wenn Sie noch kein Konto haben Google Cloud, erstellen Sie ein Konto, um die Leistung unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  3. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  4. Verify that billing is enabled for your Google Cloud project.

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Aktivieren Sie die Cloud APIs, die zum Erstellen einer Verbindung zu AlloyDB erforderlich sind.

    APIs aktivieren

  8. Klicken Sie im Schritt Projekt bestätigen auf Weiter, um den Namen des Projekts zu bestätigen, in dem Sie Änderungen vornehmen möchten.

  9. Klicken Sie im Schritt APIs aktivieren auf Aktivieren, um Folgendes zu aktivieren:

    • AlloyDB API
    • Compute Engine API
    • Cloud Resource Manager API
    • Service Networking API
    • BigQuery Storage API

    Die Service Networking API ist erforderlich, wenn Sie die Netzwerkkonnektivität zu AlloyDB über ein VPC-Netzwerk konfigurieren möchten, das sich im selben Google Cloud Projekt wie AlloyDB befindet.

    Die Compute Engine API und die Cloud Resource Manager API sind erforderlich, wenn Sie die Netzwerkkonnektivität zu AlloyDB über ein VPC Netzwerk konfigurieren möchten, das sich in einem anderen Google Cloud Projekt befindet.

  10. Achten Sie darauf, dass Sie eine vorhandene BigQuery-Tabelle haben, aus der Sie Daten synchronisieren können. Weitere Informationen finden Sie unter BigQuery-Tabellen erstellen und verwenden.

Erforderliche Rollen

Um dem Dienstkonto des AlloyDB-Clusters Zugriff auf das BigQuery-Dataset zu gewähren, benötigen Sie die folgenden Berechtigungen:

  • BigQuery-Datenbetrachter (roles/bigquery.dataViewer) oder eine benutzerdefinierte Rolle mit den Berechtigungen bigquery.tables.get und bigquery.tables.getData. Wenn diese Rolle einem Dienstkonto zugewiesen wird, bietet sie Berechtigungen zum Lesen von Daten und Metadaten aus der Tabelle oder Ansicht.
  • BigQuery-Lesesitzungsnutzer (roles/bigquery.readSessionUser) oder eine benutzerdefinierte Rolle mit den Berechtigungen bigquery.readsessions.create und bigquery.readsessions.getData. Ermöglicht das Erstellen und Verwenden von Lesesitzungen.
  • BigQuery-Jobnutzer (roles/bigquery.jobUser) oder eine benutzerdefinierte Rolle mit der Berechtigung bigquery.jobs.create. Ermöglicht das Erstellen und Ausführen von Jobs, einschließlich Abfragejobs.

Erweiterung konfigurieren

Bevor Sie Tabellen aus BigQuery synchronisieren, aktivieren Sie die erforderliche Erweiterung und konfigurieren Sie die Verbindung zu BigQuery.

  1. Erstellen Sie die Erweiterung.

    1. Stellen Sie mit dem psql Client eine Verbindung zur AlloyDB-Instanz her. Folgen Sie dazu der Anleitung unter psql-Client mit einer Instanz verbinden.
    2. Führen Sie dazu diesen Befehl aus:

      CREATE EXTENSION IF NOT EXISTS alloydb_sync;
      
  2. Erstellen Sie die Nutzerzuordnung, damit AlloyDB sich bei BigQuery authentifizieren kann.

    CREATE EXTENSION IF NOT EXISTS bigquery_fdw;
    CREATE SERVER IF NOT EXISTS BIGQUERY_SERVER_NAME FOREIGN DATA WRAPPER bigquery_fdw;
    CREATE USER MAPPING IF NOT EXISTS FOR USER SERVER BIGQUERY_SERVER_NAME;
    

    Ersetzen Sie Folgendes:

    • USER: ein Datenbanknutzername oder ein IAM-Nutzer, der auf die BigQuery-Tabelle zugreift.
    • BIGQUERY_SERVER_NAME: eindeutige Kennung für den BigQuery-Server. Definieren Sie diese einmal in einer bestimmten Datenbank. Sie können BIGQUERY_SERVER_NAME durch Ihren Servernamen ersetzen.

BigQuery-Tabelle für den einmaligen Export synchronisieren

Sie können eine BigQuery-Tabelle mit psql für den einmaligen Export synchronisieren.

BigQuery-Tabelle einmalig mit psql synchronisieren

Wenn Sie eine bearbeitbare Kopie der BigQuery-Daten erstellen möchten, führen Sie mit psql die alloydb_sync.import_bq_table Funktion aus.

SELECT alloydb_sync.import_bq_table(
  'PROJECT_ID.DATASET_ID.TABLE_ID',
  'ALLOYDB_DESTINATION_TABLE_NAME',
  'ON_EXISTS',
  ARRAY['PRIMARY_KEY_COLUMN']
);

Ersetzen Sie Folgendes:

  • PROJECT_ID: die ID des Projekts, in dem sich das BigQuery-Dataset befindet.
  • DATASET_ID: der Name des BigQuery-Datasets für die Tabelle. Bei Iceberg-Tabellen mit einem vierteiligen Namen ist dies Catalog.Namespace.
  • TABLE_ID: der Name der BigQuery-Tabelle oder -Ansicht.
  • ALLOYDB_DESTINATION_TABLE_NAME: der Name der lokalen Tabelle in der AlloyDB-Datenbank, die erstellt und in die Daten importiert werden sollen. Sie können den Schemanamen angeben, z. B. public.local_sales.
  • ON_EXISTS: die Strategie, die verwendet werden soll, wenn die Zieltabelle bereits vorhanden ist.
  • PRIMARY_KEY_COLUMN: eine optionale Liste von Spaltennamen, die als Primärschlüssel verwendet werden sollen.

Beispiel

Im folgenden Beispiel wird gezeigt, wie Sie eine Tabelle mit dem Namen transactions aus einem BigQuery-Dataset in eine neue AlloyDB-Tabelle mit dem Namen public.local_sales synchronisieren:

SELECT alloydb_sync.import_bq_table(
    'my-gcp-project.sales_data.transactions',
    'public.local_sales',
    'replace'
);
on_exists-Parameter

Der Parameter on_exists bestimmt, wie die Funktion die Synchronisierung verarbeitet, wenn die Zieltabelle bereits in AlloyDB vorhanden ist:

  • error: die Standardoption. Beendet die Synchronisierung, wenn die Zieltabelle bereits vorhanden ist.
  • skip: überspringt die Synchronisierung, wenn die Zieltabelle bereits vorhanden ist.
  • replace: ersetzt die vorhandene lokale Tabelle durch aktuelle Daten aus BigQuery.
Unterstützung für Primärschlüssel

Wenn Sie den optionalen Parameter primary_key als Textarray angeben, erstellt AlloyDB die Tabelle mit den angegebenen Spalten als Primärschlüssel.

SELECT alloydb_sync.import_bq_table(
    'my-gcp-project.sales_data.transactions',
    'public.local_sales',
    ARRAY['transaction_id']
);

BigQuery-Tabelle für den regelmäßigen Export synchronisieren

Sie können eine BigQuery-Tabelle mit psql für den regelmäßigen Export synchronisieren.

Regelmäßige Synchronisierung erstellen

Wenn Sie eine schreibgeschützte Tabelle verwalten möchten, die mit BigQuery-Daten synchronisiert wird, führen Sie mit psql die Funktion alloydb_sync.create_bq_sync_table aus.

SELECT alloydb_sync.create_bq_sync_table(
    'PROJECT_ID.DATASET_ID.TABLE_ID',
    'ALLOYDB_DESTINATION_TABLE_NAME',
    'REFRESH_INTERVAL',
    'ON_EXISTS',
    ARRAY['PRIMARY_KEY_COLUMN']
);

Ersetzen Sie Folgendes:

  • PROJECT_ID.DATASET_ID.TABLE_ID: Der voll qualifizierte Name der BigQuery-Tabelle oder -Ansicht, einschließlich der Projekt-ID, Dataset-ID und Tabellen-ID, getrennt durch Punkte. Bei Iceberg-Tabellen mit einem vierteiligen Namen wird DATASET_ID als Catalog.Namespace dargestellt. Beispiel: my-gcp-project.sales_data.transactions.
  • ALLOYDB_DESTINATION_TABLE_NAME: der Name der lokalen Tabelle in der AlloyDB-Datenbank, die erstellt und in die Daten synchronisiert werden soll.
  • REFRESH_INTERVAL: das Intervall, in dem AlloyDB Daten regelmäßig aus BigQuery aktualisiert, z. B. 12 hours.
  • ON_EXISTS: die Strategie, die verwendet werden soll, wenn die Zieltabelle bereits vorhanden ist.
  • PRIMARY_KEY_COLUMN: eine optionale Liste von Spaltennamen, die als Primärschlüssel verwendet werden sollen.

Beispiel

Im folgenden Beispiel wird gezeigt, wie Sie eine Spiegelung des Kundenprofils erstellen, die alle 12 Stunden aktualisiert wird:

SELECT alloydb_sync.create_bq_sync_table(
    'my-gcp-project.crm_data.profiles',
    'public.customer_mirror',
    '12 hours',
    'replace'
);

Jobs beobachten und verwalten

Nachdem Sie eine Synchronisierung gestartet haben, können Sie den Fortschritt beobachten und die Jobs verwalten.

Jobstatus prüfen

Große Synchronisierungen können einige Zeit dauern. Sie können den Fortschritt einschließlich der verarbeiteten Datensätze und der geschätzten Fertigstellungszeit beobachten, indem Sie die Ansicht job_status abfragen:

SELECT
    import_id,
    status,
    records_processed,
    total_records,
    error
FROM alloydb_sync.job_status;

Führen Sie beispielsweise den folgenden Befehl aus, um den Job abzubrechen:

SELECT alloydb_sync.cancel_import_job('85bb5dfa-dfb9-4017-9153-738f55abe4b1');

Synchronisierungsjob beenden und löschen

Verwenden Sie die Funktion alloydb_sync.delete_bq_sync_table, um die Spiegelung einer BigQuery-Tabelle zu beenden und die lokale Tabelle zu löschen:

SELECT alloydb_sync.delete_bq_sync_table('public.customer_mirror');

Beschränkungen

Beim Synchronisieren von Tabellen aus BigQuery gelten die folgenden Einschränkungen:

  • Diese Funktion wird nur für PostgreSQL Version 18 unterstützt.
  • Wenn Sie die Erweiterung alloydb_sync löschen (DROP), müssen Sie die Instanz neu starten, bevor Sie die Erweiterung wieder erstellen können.
  • Synchronisierungen werden innerhalb einer Transaktion ausgeführt. Wenn der Importjob unterbrochen wird oder fehlschlägt, werden die importierten Daten vom System zurückgesetzt.
  • Wenn zwei Nutzer gleichzeitig Synchronisierungsjobs mit denselben Zieltabellen starten, können die Tabellen sich gegenseitig überschreiben.
  • Wenn während des ersten Hintergrundimports für eine neu registrierte Synchronisierungstabelle eine Unterbrechung auftritt, bleibt die Tabelle unvollständig, bis sie beim nächsten geplanten Aktualisierungsintervall aktualisiert wird. Um dieses Problem zu beheben, können Sie die Synchronisierungstabelle mit der Funktion alloydb_sync.delete_bq_sync_table() löschen und neu erstellen.
  • Komplexe BigQuery-Typen wie ARRAY, BYTES, VECTOR und GEOGRAPHY werden für die Synchronisierung nicht unterstützt. Eine vollständige Liste finden Sie unter Unterstützte BigQuery-Datentypen und Spaltenzuordnungen.
  • Löschen Sie replizierte Tabellen nicht manuell. Verwenden Sie die API-Funktion alloydb_sync.delete_bq_sync_table(), um die Tabelle und Aktualisierungen sicher zu löschen.
  • Wenn Sie eine Datenbank löschen möchten, die die Erweiterung alloydb_sync verwendet, müssen Sie DROP DATABASE ... WITH (FORCE) verwenden.
  • Wenn die PostgreSQL-Datenbank abstürzt, während ein Import ausgeführt wird, bleiben die Metadaten möglicherweise im Status RUNNING hängen, wodurch zukünftige Importe blockiert werden. Sie müssen manuell ausführen UPDATE alloydb_sync.import_job_status SET status = 'FAILED' WHERE status = 'RUNNING'; um die Blockierung aufzuheben.

Preise

Wenn Sie Daten aus BigQuery mit AlloyDB synchronisieren, 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.

Nächste Schritte