BigQuery- und Iceberg-Daten mit AlloyDB synchronisieren

Auf dieser Seite wird beschrieben, wie Sie die Lakehouse Federation für AlloyDB for PostgreSQL verwenden, um Daten aus nativen BigQuery-Tabellen, materialisierten Ansichten, BigQuery-Ansichten, externen BigLake-Tabellen (z. B. verwalteten Apache Iceberg-Tabellen) und Standard-Tabellen zu synchronisieren. Iceberg ist ein offenes Tabellenformat zum Verwalten und Austauschen von Daten.

Auf dieser Seite wird davon ausgegangen, dass Sie einen AlloyDB-Cluster und eine primäre Instanz sowie ein BigQuery-Dataset und ‑Tabellen haben. Weitere Informationen finden Sie unter Datasets erstellen und Tabellen erstellen und verwenden.

Hinweis

  1. Prüfen Sie, ob das bigquery_fdw.enabled-Flag für die AlloyDB-Instanz konfiguriert ist.
  2. Machen Sie sich mit den unterstützten BigQuery-Datentypen und Spaltenzuordnungen vertraut.
  3. Melden Sie sich in Ihrem Google Cloud -Konto an. Wenn Sie mit Google Cloudnoch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit 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.
  4. 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

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

  6. Enable the AlloyDB, Compute Engine, Resource Manager, and BigQuery APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

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

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

  9. Enable the AlloyDB, Compute Engine, Resource Manager, and BigQuery APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  10. Aktivieren Sie die Cloud APIs, die zum Erstellen einer Verbindung zu AlloyDB for PostgreSQL erforderlich sind.

    APIs aktivieren

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

  12. 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 mit einem 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.

Erforderliche Rollen

Um dem AlloyDB-Cluster-Dienstkonto Lesezugriff auf das BigQuery-Dataset 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 für eine Tabelle oder Ansicht gewährt wird, bietet sie Berechtigungen zum Lesen von Daten und Metadaten aus der Tabelle oder Ansicht.
  • BigQuery-Lesesitzungsnutzer (roles/bigquery.readSessionUser) oder eine beliebige benutzerdefinierte Rolle mit den Berechtigungen bigquery.readsessions.create und bigquery.readsessions.getData. Ermöglicht das Erstellen und Verwenden von Lesesitzungen.

AlloyDB-Zugriff auf das BigQuery-Dataset gewähren

Nachdem die Funktion „Lakehouse Federation“ für Ihren AlloyDB-Cluster aktiviert wurde, gewähren Sie dem Dienstkonto des AlloyDB-Clusters Zugriff auf das BigQuery-Dataset.

Wenn Sie die gcloud CLI verwenden möchten, können Sie die Google Cloud CLI installieren und initialisieren oder Cloud Shell verwenden.

  1. Öffnen Sie die gcloud CLI. Wenn die gcloud CLI nicht installiert ist, installieren und initialisieren Sie die gcloud CLI oder verwenden Sie Cloud Shell.

  2. Führen Sie den Befehl gcloud beta alloydb clusters describe aus:

    gcloud beta alloydb clusters describe CLUSTER --region=REGION

    Ersetzen Sie Folgendes:

    • CLUSTER: Die AlloyDB-Cluster-ID.
    • REGION: Der Standort des AlloyDB-Clusters, z. B. asia-east1, us-east1. Eine vollständige Liste der Regionen finden Sie unter Instanzstandorte verwalten.

    Die Ausgabe enthält das Feld serviceAccountEmail, das das Dienstkonto für diesen Cluster ist. Sie finden das Dienstkonto auch auf der Seite Clusterdetails.

  3. Erforderliche Berechtigungen erteilen Weitere Informationen finden Sie unter Zugriff auf Ressourcen mit IAM steuern.

    Wenn das Dienstkonto des Clusters nicht die erforderlichen Berechtigungen hat, werden beim Ausführen einer Abfrage für die BigQuery-Tabelle die folgenden Fehler angezeigt:

    • The user does not have bigquery.readsessions.create permissions
    • Permission bigquery.tables.get denied on table
    • Permission bigquery.tables.getData denied on table

Erweiterung konfigurieren

  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. Alternativ können Sie AlloyDB Studio verwenden. Weitere Informationen finden Sie unter Daten mit der Google Cloud Console verwalten.
    2. Führen Sie dazu diesen Befehl aus:

      CREATE EXTENSION bigquery_fdw;
      
  2. Erstellen Sie einen externen Server, um die Verbindungsparameter für das Remote-BigQuery-Dataset zu definieren.

    CREATE SERVER BIGQUERY_SERVER_NAME FOREIGN DATA WRAPPER bigquery_fdw;
    

    Ersetzen Sie Folgendes:

    • BIGQUERY_SERVER_NAME: Eindeutige Kennung für den fremden Server. Definieren Sie dies einmal in einer bestimmten Datenbank. Sie können BIGQUERY_SERVER_NAME durch Ihren Servernamen ersetzen.
  3. Erstellen Sie die Nutzerzuordnung, indem Sie den Befehl CREATE USER MAPPING ausführen. Damit werden die Anmeldedaten angegeben, die beim Herstellen einer Verbindung zum externen Server verwendet werden sollen.

    CREATE USER MAPPING FOR USERNAME SERVER BIGQUERY_SERVER_NAME ;
    

    Ersetzen Sie Folgendes:

    • USERNAME: Ein Datenbanknutzername oder ein IAM-Nutzer, der auf die externe Tabelle zugreift.
    • BIGQUERY_SERVER_NAME: Eindeutige Kennung für den von Ihnen erstellten externen Server.
  4. Definieren Sie mit dem Befehl CREATE FOREIGN TABLE externe Tabellen, die den Tabellen entsprechen, auf die Sie in BigQuery zugreifen möchten. Mit diesem Befehl können Sie die Struktur einer Remote-Tabelle definieren. Die externe Tabelle kann entweder alle oder nur eine Teilmenge der Spalten in der Quelltabelle in BigQuery enthalten.

    CREATE FOREIGN TABLE TABLENAME (
    COLUMNX_NAME DATA_TYPE,
    COLUMNX_NAME DATA_TYPE,
    ...
    ) SERVER  BIGQUERY_SERVER_NAME OPTIONS (project BIGQUERY_PROJECT_ID, dataset  BIGQUERY_DATASET_NAME, table  BIGQUERY_TABLE_NAME [, mode EXECUTION_MODE]);
    

    Ersetzen Sie Folgendes:

    • TABLENAME: Name der externen Tabelle in der lokalen Datenbank.
    • COLUMNX_NAME: Der Name der AlloyDB-Spalte. Der Spaltenname muss genau mit dem Namen der entsprechenden Spalte in der BigQuery-Quelltabelle übereinstimmen. X gibt an, dass die Tabelle mit mehreren Spalten erstellt werden kann. Der Name muss auch exakt der Groß-/Kleinschreibung der BigQuery-Spalte entsprechen. Wenn der Name der BigQuery-Spalte Großbuchstaben enthält, z. B. employeeID, muss die AlloyDB-Kennung in doppelte Anführungszeichen gesetzt werden, z. B. "employeeID", um Groß- und Kleinbuchstaben beizubehalten.
    • DATA_TYPE: Der Datentyp der Spalte.
    • BIGQUERY_SERVER_NAME: Eindeutige Kennung für den von Ihnen erstellten ausländischen Server.
    • BIGQUERY_PROJECT_ID: ID des Projekts, in dem sich das BigQuery-Dataset befindet.
    • BIGQUERY_DATASET_NAME: Name des BigQuery-Datasets für die Tabelle.
    • BIGQUERY_TABLE_NAME: Name der BigQuery-Tabelle.
    • EXECUTION_MODE: Optional. Die Option mode unterstützt die folgenden Einstellungen:

      • query: Verwenden Sie die BigQuery API für komplexe Abfragen.
      • storage: Verwenden Sie die BigQuery Storage API für schnellere Bulk-Lesevorgänge.
      • auto: Der Modus wird automatisch ausgewählt. Das ist die Standardeinstellung.

      Weitere Informationen finden Sie unter Ausführungsmodi für BigQuery Foreign Data Wrappers.

    Nachdem die externe Tabelle erstellt wurde, können Sie sie genauso abfragen wie jede andere Tabelle in AlloyDB.

Daten synchronisieren

So synchronisieren Sie BigQuery-Daten oder BigLake-Iceberg-Daten mit AlloyDB:

  1. Wählen Sie eine vorhandene Datenquelle aus oder erstellen Sie eine native BigQuery-Tabelle oder neue verwaltete Iceberg-Tabellen.

  2. Verwenden Sie psql, um local_table mit dem folgenden Befehl zu erstellen:

    CREATE TABLE local_table AS (SELECT * from foreign_table);
    

    Mit diesem Befehl wird eine Kopie der BigQuery-Tabelle in einer lokalen, nativen AlloyDB-Tabelle erstellt.
    Je nach Anwendungs-Workflow können Sie die PostgreSQL-Erweiterung pg_cron so konfigurieren, dass die AlloyDB-Tabelle in regelmäßigen Abständen aktualisiert wird.

Zeitplan für die Synchronisierung von Daten mit AlloyDB einrichten

So richten Sie einen Zeitplan für die Synchronisierung von BigQuery-Daten oder BigLake Iceberg-Daten mit AlloyDB ein:

  1. Konfigurieren Sie die bigquery_fdw-Erweiterung.
  2. Aktivieren Sie die Erweiterung pg_cron für die AlloyDB-Instanz. Weitere Informationen finden Sie unter Unterstützte Datenbankerweiterungen.
    1. Legen Sie das Flag alloydb.enable_pg_cron auf on fest. Weitere Informationen finden Sie unter alloydb.enable_pg_cron.
    2. Setzen Sie das Flag cron.database_name auf den Namen der Datenbank, in der Sie die Erweiterung bigquery_fdw installiert haben und in der Sie die SQL-Abfragen für die Synchronisierung ausführen möchten. Weitere Informationen finden Sie unter Unterstützte Datenbank-Flags.
  3. Führen Sie die folgenden Befehle in der Datenbank aus, in der Sie die Erweiterung bigquery_fdw installiert haben, um eine lokale Kopie der externen Tabelle regelmäßig zu aktualisieren:

    CREATE EXTENSION pg_cron;
    SELECT cron.schedule(JOB_NAME, SCHEDULE, 'CREATE TABLE IF NOT EXISTS local_table_copy AS (SELECT * FROM foreign_table); DROP TABLE IF EXISTS local_table; ALTER TABLE local_table_copy RENAME TO local_table;');
    

    Ersetzen Sie Folgendes:

    • JOB_NAME: Der Name des Jobs.
    • SCHEDULE: Der Zeitplan für den Job.

    Weitere Informationen finden Sie unter Was ist pg_cron?.

Nächste Schritte