BigQuery-Daten mit AlloyDB synchronisieren

Wenn Sie Ihren operativen Anwendungen transaktionalen Zugriff mit niedriger Latenz auf Ihre Analysedaten gewähren möchten, synchronisieren Sie Tabellen aus BigQuery mit Ihrer AlloyDB for PostgreSQL-Instanz. Im Gegensatz zu einem Foreign Data Wrapper (FDW), der Daten in BigQuery abfragt, werden die Daten mit der Synchronisierungsfunktion in den AlloyDB-Speicher kopiert. Ihre Abfragen lesen dann aus lokalen Tabellen, um die Leistung zu verbessern.

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 oder Spiegelung: Erstellt eine lokale Tabelle mit Lesezugriff, die automatisch nach einem Zeitplan aktualisiert wird, z. B. alle 6 Stunden oder täglich.

Leistungs- und betriebliche Aspekte

Beachten Sie bei der Verwendung von BigQuery-Synchronisierungstabellen Folgendes:

  • Ressourcennutzung: Die Datenverschiebung verbraucht CPU und Arbeitsspeicher. Bei sehr großen Tabellen sollten Sie Synchronisierungen außerhalb der Spitzenzeiten planen, um Auswirkungen auf Ihre primäre Transaktionsarbeitslast zu vermeiden.
  • Sichtbarkeit von Daten: Während eines Ersetzungsvorgangs wird die vorhandene Zieltabelle gelöscht und im Voraus neu erstellt. Bei Abfragen während des Imports wird zuerst eine leere Tabelle angezeigt. Anschließend werden die neu importierten Daten nach und nach angezeigt, wenn Batchtransaktionen abgeschlossen werden.

Hinweis

  1. Legen Sie das Datenbank-Flag alloydb_sync.enabled=on für Ihre AlloyDB-Instanz fest. Weitere Informationen finden Sie unter Datenbank-Flags einer Instanz konfigurieren.
  2. Machen Sie sich damit vertraut, wie bigquery_fdw BigQuery-Datentypen und Spaltenzuordnungen verarbeitet, da die alloydb_sync-Erweiterung bigquery_fdw verwendet, um eine Verbindung zu BigQuery herzustellen.
  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. Aktivieren Sie die Cloud APIs, die zum Erstellen von AlloyDB und zum Herstellen einer Verbindung erforderlich sind.

    APIs aktivieren

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

    2. 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 Netzwerkverbindung 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.

  6. 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

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

  • BigQuery-Datenbetrachter (roles/bigquery.dataViewer) oder eine beliebige 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-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 beliebige benutzerdefinierte Rolle mit den Berechtigungen bigquery.jobs.create. Bietet die Möglichkeit, Jobs zu erstellen und auszuführen, einschließlich Abfragejobs. Wenn Sie ein separates Laufzeitprojekt angeben, wird der Job in diesem Projekt und nicht im Datenprojekt ausgeführt. Das bedeutet, dass Sie die Rolle „Jobnutzer“ für das Laufzeitprojekt gewähren müssen.

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, führt AlloyDB diese Schritte automatisch aus.

  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. Damit sich AlloyDB bei BigQuery authentifizieren kann, erstellen Sie den externen Server und die Nutzerzuordnung:

    CREATE EXTENSION IF NOT EXISTS bigquery_fdw;
    CREATE SERVER IF NOT EXISTS bigquery_server FOREIGN DATA WRAPPER bigquery_fdw
      OPTIONS (runtime_project 'RUNTIME_PROJECT_ID');
    CREATE USER MAPPING IF NOT EXISTS FOR USER SERVER bigquery_server;
    

    Ersetzen Sie Folgendes:

    • RUNTIME_PROJECT_ID: optional. Die ID desGoogle Cloud -Projekts, das die Abfrage verarbeitet und für das Rechenkosten anfallen. Wenn nichts angegeben ist, werden die Abfragen dem Projekt in Rechnung gestellt, in dem die Daten gespeichert sind.
    • USER: ein Datenbanknutzername oder ein IAM-Nutzer, der auf die BigQuery-Tabelle zugreift.

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 derGoogle Cloud Console mit AlloyDB:

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

    Zur Seite "BigQuery"

  2. Klicken Sie im linken Bereich auf Explorer:

    Wenn der linke Bereich nicht angezeigt wird, klicken Sie auf Linken Bereich maximieren, um ihn 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 eine Tabelle aus.

  5. Klicken Sie im Detailbereich auf Mehr > In AlloyDB exportieren oder synchronisieren.

  6. Wählen Sie unter Projekt auswählen das Projekt für Ihren AlloyDB-Cluster aus. Wenn Sie die erforderlichen Berechtigungen haben, können Sie ein anderes Projekt als Ihr aktuelles BigQuery-Projekt auswählen.

  7. 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. Führen Sie anschließend folgende Schritte aus:

      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 die Option Nur einmal aus, um eine Kopie der BigQuery-Tabelle zu erstellen.

      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 importierten Tabellen abzufragen. Klicken Sie auf Abfrage, um zur importierten Tabelle in AlloyDB Studio zu gelangen.

    • 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 als Clustertyp Bereitgestellter Cluster aus.

      4. Klicken Sie auf Weiter.

      5. Wählen Sie unter Synchronisierungskonfiguration die AlloyDB-Standardzieldatenbank postgres und das Standardschema public für die AlloyDB-Zieltabelle aus und geben Sie einen Namen für die AlloyDB-Zieltabelle an.

        Wählen Sie für Synchronisierungshäufigkeit die Option Nur 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 neue primäre Instanz erstellen.

      8. Klicken Sie auf Cluster erstellen.

      Wenn die Synchronisierung eingerichtet ist, rufen Sie AlloyDB Studio auf, um Ihre importierten Tabellen abzufragen.

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 dies der 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 mit einer neuen 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 für den regelmäßigen Export über dieGoogle Cloud Console oder mit psql synchronisieren.

Verwenden Sie die Google Cloud Console.

So synchronisieren Sie eine BigQuery-Tabelle mit derGoogle Cloud Console mit AlloyDB:

  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 der linke Bereich nicht angezeigt wird, klicken Sie auf Linken Bereich maximieren, um ihn 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 eine Tabelle aus.

  5. Klicken Sie im Detailbereich auf Mehr > In AlloyDB exportieren oder synchronisieren.

  6. Wählen Sie unter Projekt auswählen das Projekt für Ihren AlloyDB-Cluster aus. Wenn Sie die erforderlichen Berechtigungen haben, können Sie ein anderes Projekt als Ihr aktuelles BigQuery-Projekt auswählen.

  7. 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. Führen Sie anschließend folgende Schritte aus:

      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. Jede Stunde 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 zu gelangen.

    • 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 als Clustertyp Bereitgestellter Cluster aus.

      4. Klicken Sie auf Weiter.

      5. Wählen Sie unter Synchronisierungskonfiguration die AlloyDB-Standardzieldatenbank postgres und das Standardschema public für die AlloyDB-Zieltabelle aus und geben Sie einen Namen für die AlloyDB-Zieltabelle an.

        Wählen Sie für Synchronisierungshäufigkeit die Option Nur 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 neue primäre Instanz erstellen.

      8. Klicken Sie auf Cluster erstellen.

      Wenn die Synchronisierung eingerichtet ist, rufen Sie AlloyDB Studio auf, um Ihre importierten Tabellen abzufragen.

Regelmäßige Synchronisierung erstellen

Wenn Sie eine schreibgeschützte Tabelle verwalten 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 vollständig 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 sollen.
  • REFRESH_INTERVAL: das Intervall, in dem AlloyDB regelmäßig 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

Im folgenden Beispiel wird gezeigt, wie Sie einen Kundenprofilspiegel 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 beobachten und die Jobs verwalten.

Jobstatus prüfen

Die Synchronisierung großer Datenmengen kann einige Zeit dauern. Sie können den Fortschritt, einschließlich der verarbeiteten Datensätze und der geschätzten Fertigstellungszeit, durch Abfragen der Ansicht job_status überwachen:

SELECT
    import_id,
    status,
    records_processed,
    total_records,
    error_message
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 mit 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 unterstützten Datentypen verwenden, die in der folgenden Tabelle aufgeführt sind:

Datentypen für BigQuery-Tabelle PostgreSQL-Datentypen
BOOLEAN BOOLEAN
INTEGER (INT64) BIGINT
FLOAT (FLOAT64) DOUBLE PRECISION
STRING TEXT
NUMERIC NUMERIC
BIGNUMERIC NUMERIC
DATE DATE
TIMESTAMP TIMESTAMPTZ
TIME TIME
DATETIME TIMESTAMP
JSON JSONB
BYTES BYTEA

Beschränkungen

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

  • Diese Funktion wird nur für PostgreSQL Version 18 unterstützt.
  • Für diese Funktion ist das Datenbank-Flag alloydb_sync.enabled=on auf der Instanz erforderlich.
  • Wenn Sie den externen Server bigquery_fdw und die Nutzerzuordnung in einer Datenbank konfigurieren, müssen Sie den externen Server bigquery_server nennen.
  • Komplexe BigQuery-Datentypen wie ARRAY, STRUCT, VECTOR, GEOGRAPHY, RANGE und INTERVAL werden für die Synchronisierung nicht unterstützt. Parametrisierte BigQuery-Datentypen wie STRING(L), BYTES(L), NUMERIC(P, S) und BIGNUMERIC(P, S) werden TEXT zugeordnet. Weitere Informationen finden Sie unter Unterstützte BigQuery-Datentypen und Spaltenzuordnungen.
  • Wenn Sie den Parameter primary_key angeben, darf die durch Kommas getrennte Liste der Primärschlüsselspaltennamen 1.023 Byte nicht überschreiten. Außerdem dürfen die JSON-serialisierten Primärschlüsselspaltennamen und -werte für eine Zeile 255 Byte nicht überschreiten.
  • Für Tabellen mit regelmäßiger Synchronisierung, die mit der Funktion alloydb_sync.create_bq_sync_table erstellt wurden, unterstützt der Parameter refresh_interval keine Monate oder Jahre. Geben Sie das Intervall als ganze Zahl von Tagen, Stunden (weniger als 24), Minuten (weniger als 60) oder Sekunden (weniger als 60) an. Intervalle mit gemischten Einheiten, z. B. 1 hour 30 minutes oder 90 minutes, werden auf die ganze Zahl der größten Zeiteinheit gekürzt, z. B. 1 hour.
  • Nur der Datenbanknutzer, der einen Synchronisierungsjob initiiert oder eine Tabelle für die regelmäßige Synchronisierung erstellt hat, kann Folgendes tun:

    • Job in der Ansicht alloydb_sync.job_status ansehen
    • Job mit der Funktion alloydb_sync.cancel_import_job abbrechen
    • Löschen Sie die Synchronisierungstabelle mit der Funktion alloydb_sync.delete_bq_sync_table.
  • Bei Synchronisierungsjobs werden Daten schrittweise in Batches und nicht in einer einzelnen Transaktion übertragen. Während eines replace-Vorgangs wird die Zieltabelle vor dem Laden der Daten gelöscht und neu erstellt. Gleichzeitige Abfragen sehen daher eine leere oder teilweise gefüllte Tabelle, bis der Job abgeschlossen ist. Wenn ein Importjob fehlschlägt oder vor dem Abschluss abgebrochen wird, verbleiben teilweise importierte Zeilen und eine interne Definition einer externen Tabelle in der Datenbank. Führen Sie den Import noch einmal aus, wobei der Parameter on_exists auf replace gesetzt ist.

  • Wenn während des ersten Hintergrundimports für eine neu registrierte Tabelle mit regelmäßiger Synchronisierung eine Unterbrechung auftritt, bleibt die Tabelle bis zum nächsten geplanten Aktualisierungsintervall unvollständig.

  • Standard-DROP DATABASE-Befehle schlagen fehl, wenn der Worker für das Hintergrundjob-Tracking mit einer Datenbank verbunden ist, die Tabellen für die regelmäßige Synchronisierung oder Synchronisierungsaktivitäten innerhalb der letzten 10 Sekunden enthält.

  • In Datenbanken, in denen keine Tabellen für die regelmäßige Synchronisierung mit der Funktion alloydb_sync.create_bq_sync_table konfiguriert sind, wird der Worker für die Hintergrundjob-Verfolgung nach 10 Sekunden Inaktivität beendet. Der Worker weist beim nächsten Funktionsaufruf alloydb_sync.import_bq_table oder beim Löschen und Neuerstellen der Erweiterung alloydb_sync ein neues Segment im dynamischen gemeinsamen Arbeitsspeicher zu. Wenn Sie eine große Anzahl isolierter einmaliger Importe ausführen, die durch Leerlaufzeiten ohne aktive Tabelle für die regelmäßige Synchronisierung getrennt sind, können die freigegebenen Speicherplätze erschöpft werden, sodass ein Neustart der Instanz erforderlich ist.

Best Practices

Beachten Sie beim Konfigurieren und Verwalten von Tabellensynchronisierungen aus BigQuery die folgenden Best Practices:

  • Führen Sie die CREATE EXTENSION IF NOT EXISTS alloydb_sync CASCADE;-Anweisung in einer eigenen festgeschriebenen Transaktion aus, bevor Sie Synchronisierungsfunktionen aufrufen.
  • Vermeiden Sie es, die BigQuery-Tabelle während eines Imports zu ändern. Wenn die Quelltabelle gleichzeitig aktualisiert wird, importiert ein Synchronisierungsjob möglicherweise die aktualisierten Daten.
  • Geben Sie beim Aufrufen der Funktionen alloydb_sync.import_bq_table, alloydb_sync.create_bq_sync_table oder alloydb_sync.delete_bq_sync_table einen konsistenten, schemaqualifizierten Zieltabellennamen an, z. B. public.my_table. Starten Sie nicht mehrere Synchronisierungsjobs für dieselbe Zieltabelle gleichzeitig. Wenn Sie Tabellen in mehreren Datenbanken im selben Cluster synchronisieren, verwenden Sie unterschiedliche Schema- oder Tabellennamen für die Datenbanken.
  • Wenn Sie eine Tabelle mit regelmäßiger Synchronisierung mit der Funktion alloydb_sync.create_bq_sync_table erstellen, setzen Sie den Parameter on_exists auf replace, damit die Zieltabelle durch geplante Aktualisierungen aktualisiert wird. Geben Sie den Parameter refresh_interval als einzelne ganze Einheit von Tagen, Stunden (weniger als 24), Minuten (weniger als 60) oder Sekunden (weniger als 60) an.
  • Wenn Sie sehr große BigQuery-Tabellen importieren, erhöhen Sie den Wert des Datenbank-Flags temp_file_limit und optional den Wert des Flags work_mem auf Ihrer Instanz, damit der Import die Größenbeschränkung für temporäre Dateien nicht überschreitet. Während eines Imports werden eingehende Zeilen bis zum Limit von work_mem im Arbeitsspeicher zwischengespeichert und dann in lokalen temporären PostgreSQL-Dateien bereitgestellt, bevor Batch-Commits abgeschlossen werden.
  • Führen Sie die DROP TABLE-Anweisung nicht manuell für eine replizierte Synchronisierungstabelle oder eine Tabelle mit einem aktiven Import aus. Wenn Sie einen laufenden Import beenden möchten, führen Sie zuerst die Funktion alloydb_sync.cancel_import_job als der Datenbanknutzer aus, der den Job gestartet hat. Wenn Sie eine Tabelle für die regelmäßige Synchronisierung und den zugehörigen Zeitplan entfernen möchten, verwenden Sie die Funktion alloydb_sync.delete_bq_sync_table und übergeben Sie den genauen Namen der Zieltabelle, den Sie beim Erstellen der Synchronisierungstabelle verwendet haben.
  • Wenn ein einmaliger Import fehlschlägt oder vor dem Abschluss abgebrochen wird, führen Sie die Funktion alloydb_sync.import_bq_table noch einmal aus, wobei der Parameter on_exists auf replace gesetzt ist. Wenn der anfängliche Hintergrundimport für eine neu registrierte Tabelle mit regelmäßiger Synchronisierung unterbrochen wird und Sie das Problem sofort beheben möchten, anstatt auf die nächste geplante Aktualisierung zu warten, löschen Sie die Synchronisierungstabelle mit der Funktion alloydb_sync.delete_bq_sync_table und erstellen Sie sie neu.
  • Wenn die Slots für Hintergrund-Worker in max_worker_processes beim Start eines Jobs erschöpft sind oder die Datenbank abstürzt, während ein Import in der Warteschlange ist oder ausgeführt wird, bleiben die Jobmetadaten möglicherweise im Status QUEUED oder RUNNING hängen und blockieren zukünftige Importe in diese Tabelle. Wenn Sie die Blockierung der Tabelle aufheben möchten, aktualisieren Sie den Jobstatus als Datenbanknutzer, der den Job gestartet hat, indem Sie den folgenden Befehl ausführen:

    UPDATE alloydb_sync.import_job_status
    SET status = 'FAILED'
    WHERE status IN ('QUEUED', 'RUNNING');
    
  • Wenn Sie eine Datenbank mit Tabellen für die regelmäßige Synchronisierung oder mit kürzlich erfolgten Synchronisierungsaktivitäten löschen möchten, führen Sie DROP DATABASE DATABASE_NAME WITH (FORCE) aus oder löschen Sie zuerst alle Synchronisierungstabellen und warten Sie mindestens 10 Sekunden, bis der Hintergrund-Tracker-Worker beendet ist. Sie können prüfen, ob der Worker noch mit der Datenbank verbunden ist, indem Sie die Ansicht pg_stat_activity abfragen:

    SELECT pid, datname, backend_type
    FROM pg_stat_activity
    WHERE datname = 'DATABASE_NAME'
      AND backend_type = 'job_tracker';
    

    Ersetzen Sie DATABASE_NAME durch den Namen Ihrer Datenbank.

Preise

Wenn Sie Daten von BigQuery mit AlloyDB synchronisieren, werden Ihnen die Preise für BigQuery-Streaming-Lesevorgä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