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 operative Systeme erstellen, die von einem transaktionalen Zugriff mit geringer Latenz auf Ihren Data Lake profitieren. Im Gegensatz zu einem Foreign Data Wrapper (FDW), der Daten direkt abfragt, werden die Daten bei einer Synchronisationstabelle in den AlloyDB-Speicher verschoben, um die Leistung zu maximieren.

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

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

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

Hinweise zu Leistung und Betrieb

Wenn Sie BigQuery-Synchronisierungstabellen verwenden, sollten Sie Folgendes beachten:

  • Ressourcennutzung: Für die Datenübertragung werden CPU und Arbeitsspeicher benötigt. Bei sehr großen Tabellen sollten Sie Synchronisierungen außerhalb der Spitzenzeiten planen, um die primäre transaktionale Arbeitslast nicht zu beeinträchtigen.
  • Datensichtbarkeit: Während eines Ersetzungsvorgangs wird die vorhandene Zieltabelle im Voraus gelöscht und neu erstellt. Bei Abfragen während des Imports wird anfangs eine leere Tabelle angezeigt. Die neu importierten Daten werden dann nach und nach eingeblendet, wenn Batchtransaktionen übernommen werden.

Hinweis

  1. Machen Sie sich mit der Verarbeitung von BigQuery-Datentypen und Spaltenzuordnungen durch bigquery_fdw vertraut, da die alloydb_sync-Erweiterung bigquery_fdw verwendet, um eine Verbindung zu BigQuery herzustellen.
  2. 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

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

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

    APIs aktivieren

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

  6. 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 Netzwerkverbindung zu AlloyDB über ein VPC-Netzwerk konfigurieren möchten, das sich in einem anderen Google Cloud -Projekt befindet.

  7. Sie benötigen eine vorhandene BigQuery-Tabelle, aus der Daten synchronisiert werden können. Weitere Informationen finden Sie unter BigQuery-Tabellen erstellen und verwenden.

Erforderliche Rollen

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

  • Rolle „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, gewährt sie Berechtigungen zum Lesen von Daten und Metadaten aus der Tabelle oder Ansicht.
  • BigQuery Read Session User (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 den Berechtigungen bigquery.jobs.create. Ermöglicht das Erstellen und Ausführen von Jobs, einschließlich Abfragejobs.

Erweiterung konfigurieren

Bevor Sie Tabellen aus BigQuery synchronisieren, müssen Sie die erforderliche Erweiterung aktivieren und die Verbindung zu BigQuery konfigurieren. Wenn Sie die Google Cloud Console verwenden, werden diese Schritte automatisch von AlloyDB ausgeführt.

  1. Erstellen Sie die Erweiterung.

    1. Stellen Sie über den 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 dies einmal in einer bestimmten Datenbank. Sie können BIGQUERY_SERVER_NAME durch den Namen Ihres Servers ersetzen.

BigQuery-Tabelle für einmaligen Export synchronisieren

Sie können eine BigQuery-Tabelle für den einmaligen Export über dieGoogle Cloud -Konsole oder mit psql synchronisieren.

Verwenden Sie die Google Cloud Console.

So synchronisieren Sie eine BigQuery-Tabelle mit AlloyDB über dieGoogle Cloud -Konsole:

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

    Zur Seite "BigQuery"

  2. Klicken Sie im linken Bereich auf  Explorer:

    Wenn das linke Steuerfeld nicht angezeigt wird, klicken Sie auf  Linkes Steuerfeld maximieren, um es zu öffnen.

  3. Maximieren Sie im Bereich Explorer Ihr Projekt, klicken Sie auf Datasets und dann auf Ihr Dataset.

  4. Klicken Sie auf Übersicht > Tabellen und wählen Sie dann eine Tabelle aus.

  5. Klicken Sie im Detailbereich auf Hochladen Exportieren / Synchronisieren > AlloyDB (einmal exportieren oder synchronisieren).

  6. Wählen Sie unter Zielcluster auswählen eine der folgenden Optionen aus:

    • Wählen Sie Vorhandenen Cluster verwenden aus, um die BigQuery-Tabelle in einen vorhandenen AlloyDB-Cluster zu exportieren. Gehen Sie dann so vor:

      1. Wählen Sie den primären AlloyDB-Cluster aus.

      2. Wählen Sie die AlloyDB-Zieldatenbank aus.

      3. Wählen Sie das Schema für Ihre AlloyDB-Zieltabelle aus.

      4. Geben Sie einen Namen für die AlloyDB-Zieltabelle an.

      5. Wählen Sie als Synchronisierungshäufigkeit die Option Einmal aus, um eine Kopie der BigQuery-Tabelle zu erstellen.

      6. Klicken Sie auf Export einrichten.

      Nach Abschluss der Synchronisierungseinrichtung können Sie die bereitgestellten SQL-Anweisungen verwenden, um den Importjob zu verfolgen und die importierten Tabellen abzufragen. Klicken Sie auf Abfrage, um zur importierten Tabelle in AlloyDB Studio weitergeleitet zu werden.

    • Wählen Sie Neuen Cluster erstellen aus, um die BigQuery-Tabelle in einen neuen AlloyDB-Cluster zu exportieren. Gehen Sie anschließend so vor:

      1. Klicken Sie auf Export einrichten.

      2. Wählen Sie im Dialogfeld Weiterleitung zu AlloyDB die Option Weiterleiten aus.

      3. Wählen Sie einen Clustertyp aus, entweder Cluster für kostenlosen Testzeitraum oder Bereitgestellter Cluster.

      4. Klicken Sie auf Weiter.

      5. Wählen Sie unter Sync Configuration (Synchronisierungskonfiguration) die standardmäßige postgres-Zieldatenbank für AlloyDB, das standardmäßige public-Schema für die AlloyDB-Zieltabelle und einen Namen für die AlloyDB-Zieltabelle aus.

        Wählen Sie als Synchronisierungshäufigkeit die Option Einmal aus, um eine Kopie der BigQuery-Tabelle zu erstellen.

      6. Klicken Sie auf Weiter.

      7. Konfigurieren Sie den Cluster. Weitere Informationen zu den einzelnen Feldern finden Sie unter Neuen Cluster und primäre Instanz erstellen.

      8. Klicken Sie auf Cluster erstellen.

      Wenn die Synchronisierung eingerichtet ist, können Sie in AlloyDB Studio Ihre importierten Tabellen abfragen.

BigQuery-Tabelle einmalig mit psql synchronisieren

Wenn Sie eine bearbeitbare Kopie von BigQuery-Daten erstellen möchten, verwenden Sie psql, um die Funktion alloydb_sync.import_bq_table auszuführen.

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 das 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 eine Tabelle mit dem Namen transactions aus einem BigQuery-Dataset in eine neue AlloyDB-Tabelle mit dem Namen public.local_sales synchronisiert wird:

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. Die Synchronisierung wird beendet, wenn die Zieltabelle bereits vorhanden ist.
  • skip: Die Synchronisierung wird übersprungen, wenn die Zieltabelle bereits vorhanden ist.
  • replace: Die vorhandene lokale Tabelle wird durch neue Daten aus BigQuery ersetzt.
Unterstützung von Primärschlüsseln

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 regelmäßigen Export synchronisieren

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

Verwenden Sie die Google Cloud Console.

So synchronisieren Sie eine BigQuery-Tabelle mit AlloyDB über dieGoogle Cloud -Konsole:

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

    Zur Seite "BigQuery"

  2. Klicken Sie im linken Bereich auf  Explorer:

    Hervorgehobener Button für den Explorer-Bereich.

    Wenn das linke Steuerfeld nicht angezeigt wird, klicken Sie auf  Linkes Steuerfeld maximieren, um es zu öffnen.

  3. Maximieren Sie im Bereich Explorer Ihr Projekt, klicken Sie auf Datasets und dann auf Ihr Dataset.

  4. Klicken Sie auf Übersicht > Tabellen und wählen Sie dann eine Tabelle aus.

  5. Klicken Sie im Detailbereich auf Hochladen Exportieren / Synchronisieren > AlloyDB (einmal exportieren oder synchronisieren).

  6. Wählen Sie unter Zielcluster auswählen eine der folgenden Optionen aus:

    • Wählen Sie Vorhandenen Cluster verwenden aus, um die BigQuery-Tabelle in einen vorhandenen AlloyDB-Cluster zu exportieren. Gehen Sie dann so vor:

      1. Wählen Sie den primären AlloyDB-Cluster aus.

      2. Wählen Sie die AlloyDB-Zieldatenbank aus.

      3. Wählen Sie das Schema für Ihre AlloyDB-Zieltabelle aus.

      4. Geben Sie einen Namen für die AlloyDB-Zieltabelle an.

      5. Wählen Sie für Synchronisierungshäufigkeit einen Zeitraum aus, um eine regelmäßige Synchronisierung der BigQuery-Tabelle zu erstellen, z. B. Stündlich oder Alle sechs Stunden.

      6. Klicken Sie auf Export einrichten.

      Wenn die Synchronisierung eingerichtet ist, können Sie die bereitgestellten SQL-Anweisungen verwenden, um den Importjob zu verfolgen und die importierte Tabelle abzufragen. Klicken Sie auf Abfrage, um zur importierten Tabelle in AlloyDB Studio weitergeleitet zu werden.

    • Wählen Sie Neuen Cluster erstellen aus, um die BigQuery-Tabelle in einen neuen AlloyDB-Cluster zu exportieren. Gehen Sie anschließend so vor:

      1. Klicken Sie auf Export einrichten.

      2. Wählen Sie im Dialogfeld Weiterleitung zu AlloyDB die Option Weiterleiten aus.

      3. Wählen Sie einen Clustertyp aus, entweder Cluster für kostenlosen Testzeitraum oder Bereitgestellter Cluster.

      4. Klicken Sie auf Weiter.

      5. Wählen Sie unter Sync Configuration (Synchronisierungskonfiguration) die standardmäßige postgres-Zieldatenbank für AlloyDB, das standardmäßige public-Schema für die AlloyDB-Zieltabelle und einen Namen für die AlloyDB-Zieltabelle aus.

        Wählen Sie als Synchronisierungshäufigkeit die Option Einmal aus, um eine Kopie der BigQuery-Tabelle zu erstellen.

      6. Klicken Sie auf Weiter.

      7. Konfigurieren Sie den Cluster. Weitere Informationen zu den einzelnen Feldern finden Sie unter Neuen Cluster und primäre Instanz erstellen.

      8. Klicken Sie auf Cluster erstellen.

      Wenn die Synchronisierung eingerichtet ist, können Sie in AlloyDB Studio Ihre importierten Tabellen abfragen.

Regelmäßige Synchronisierung erstellen

Wenn Sie eine schreibgeschützte Tabelle erstellen möchten, die mit BigQuery-Daten synchronisiert bleibt, verwenden Sie psql, um die Funktion alloydb_sync.create_bq_sync_table auszuführen.

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, durch Punkte getrennt. 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, in der Daten erstellt und synchronisiert werden sollen.
  • REFRESH_INTERVAL: das Intervall, in dem AlloyDB Daten 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

Das folgende Beispiel zeigt, wie Sie einen Spiegel des Kundenprofils erstellen, der 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 überwachen und verwalten

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

Jobstatus prüfen

Umfangreiche Synchronisierungen können einige Zeit in Anspruch nehmen. Sie können den Fortschritt überwachen, einschließlich der verarbeiteten Datensätze und der geschätzten Fertigstellungszeit, 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

Wenn Sie die Spiegelung einer BigQuery-Tabelle beenden und die lokale Tabelle löschen möchten, verwenden Sie die Funktion alloydb_sync.delete_bq_sync_table:

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

Datentypzuordnungen

Wenn Sie Daten aus BigQuery mit der Erweiterung alloydb_sync in AlloyDB synchronisieren oder importieren, ordnet AlloyDB BigQuery-Datentypen den entsprechenden PostgreSQL-Datentypen in Ihrer Zieltabelle zu.

Prüfen Sie, ob die Spalten der BigQuery-Tabelle die folgenden unterstützten Datentypen verwenden.

In der folgenden Tabelle sind die Datentypzuordnungen zwischen BigQuery und AlloyDB aufgeführt.

Datentypen für BigQuery-Tabelle Empfohlene Datentypen für externe PostgreSQL-Tabellen

BOOLEAN

BOOLEAN

INTEGER (INT64)

BIGINT

FLOAT (FLOAT64)

DOUBLE PRECISION

STRING

VARCHAR

NUMERIC

NUMERIC(38, 9)

NUMERIC(P[, S])

NUMERIC(P, S)

BIGNUMERIC

NUMERIC(77, 38)

BIGNUMERIC(P[, S])

NUMERIC(P, S)

DATE

DATE

TIMESTAMP

TIMESTAMPTZ

TIME

TIME

JSON

JSONB

BYTES

BYTEA

GEOGRAPHY

GEOGRAPHY(POINT), ...

Weitere Informationen finden Sie unter PostGIS_Geography.

DATETIME

TIMESTAMP

ARRAY

VECTOR(N)

N ist die Dimension des Vektors. Sie müssen das Flag bigquery_fdw.enable_vector_downcasting in der Sitzung festlegen. Da der Typ VECTOR in AlloyDB den Typ float4 verwendet, kann es bei dieser Konvertierung zu einem Verlust an Genauigkeit kommen.

Weitere Informationen finden Sie unter pgvector-Erweiterung.

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 DROP haben, müssen Sie die Instanz neu starten, bevor Sie die Erweiterung noch einmal erstellen.
  • Synchronisierungen werden in 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 Zieltabelle starten, werden die Tabellen möglicherweise überschrieben.
  • Wenn während des ersten Hintergrundimports für eine neu registrierte Synchronisierungstabelle eine Unterbrechung auftritt, bleibt die Tabelle bis zum nächsten geplanten Aktualisierungsintervall unvollständig. Um das 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 eine replizierte Tabelle 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 Postgres-Datenbank während eines Imports abstürzt, bleiben die Metadaten möglicherweise im Status RUNNING hängen, wodurch zukünftige Importe blockiert werden. Sie müssen UPDATE alloydb_sync.import_job_status SET status = 'FAILED' WHERE status = 'RUNNING'; manuell ausführen, um die Blockierung aufzuheben.

Preise

Wenn Sie Daten aus BigQuery mit AlloyDB synchronisieren, wird Ihnen der Preis für BigQuery-Streaminglesevorgänge (Storage Read API) 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