Sie können Daten aus integrierten BigQuery-Tabellen, materialisierten Ansichten und BigQuery-Ansichten sowie aus externen BigLake-Tabellen (z. B. verwalteten Apache Iceberg-Tabellen) und externen Standardtabellen in AlloyDB for PostgreSQL importieren. Apache Iceberg ist ein offenes Tabellenformat zum Verwalten und Austauschen von Daten.
Durch den Import von Daten müssen Sie keine komplexen und fehleranfälligen Datenpipelines mehr erstellen und verwalten, mit denen Daten manuell von BigQuery zurück zu AlloyDB verschoben werden. Weitere Informationen finden Sie unter Übersicht über die Datensynchronisierung.
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, siehe Datasets erstellen und Tabellen erstellen und verwenden.
Hinweis
- Konfigurieren Sie das
bigquery_fdw.enabledFlag für die AlloyDB-Instanz. - Sehen Sie sich die Datentypzuordnungen an, um zu erfahren, wie BigQuery-Typen in PostgreSQL dargestellt werden, wenn Sie
bigquery_fdwverwenden. -
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the AlloyDB, Compute Engine, Resource Manager, and BigQuery APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Aktivieren Sie die erforderlichen Cloud APIs, um eine Verbindung zu AlloyDB herzustellen.
Klicken Sie im Schritt Projekt bestätigen auf Weiter , um den Namen des Projekts zu bestätigen, an dem Sie Änderungen vornehmen möchten.
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.
Erforderliche Rollen
Um dem Dienstkonto des AlloyDB-Clusters Leseberechtigung für das BigQuery-Dataset zu erteilen, benötigen Sie die folgenden Berechtigungen:
- BigQuery-Datenbetrachter
(
roles/bigquery.dataViewer) oder eine benutzerdefinierte Rolle mit den Berechtigungenbigquery.tables.getundbigquery.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 benutzerdefinierte Rolle mit den Berechtigungenbigquery.readsessions.createundbigquery.readsessions.getData. Ermöglicht das Erstellen und Verwenden von Lesesitzungen.
AlloyDB-Zugriff auf das BigQuery-Dataset gewähren
Nachdem Sie die Erweiterung bigquery_fdw für Ihren AlloyDB-Cluster konfiguriert haben, 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.
Öffnen Sie die gcloud CLI. Wenn die gcloud CLI nicht installiert ist, installieren und initialisieren Sie sie oder verwenden Sie Cloud Shell.
Führen Sie den
gcloud beta alloydb clusters describeBefehl aus:gcloud beta alloydb clusters describe CLUSTER --region=REGIONErsetzen 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 AlloyDB-Standorte.
Die Ausgabe enthält das Feld
serviceAccountEmail, das das Dienstkonto für diesen Cluster ist. Sie finden das Dienstkonto auch auf der Seite Clusterdetails.Erteilen Sie die erforderlichen Berechtigungen. 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 permissionsPermission bigquery.tables.get denied on tablePermission bigquery.tables.getData denied on table
Erweiterung konfigurieren
Erstellen Sie die Erweiterung.
- Stellen Sie mit dem 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.
Führen Sie dazu diesen Befehl aus:
CREATE EXTENSION bigquery_fdw;
Erstellen Sie einen externen Server, um die Verbindungsparameter für das externe 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 externen Server. Definieren Sie dies einmal in einer bestimmten Datenbank. Sie könnenBIGQUERY_SERVER_NAMEdurch Ihren Servernamen ersetzen.
Erstellen Sie die Nutzerzuordnung, indem Sie den
CREATE USER MAPPINGBefehl ausführen. Dieser gibt die Anmeldedaten an, die verwendet werden sollen, wenn Sie eine Verbindung zum externen Server herstellen.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. Bei einem IAM-Nutzer muss der Name in Kleinbuchstaben geschrieben und in Anführungszeichen gesetzt werden, da er Sonderzeichen wie@und.)enthält.BIGQUERY_SERVER_NAME: eindeutige Kennung für den von Ihnen erstellten externen Server.
Definieren Sie mit dem Befehl
CREATE FOREIGN TABLEexterne Tabellen, die den Tabellen entsprechen, auf die Sie in BigQuery zugreifen möchten. Mit diesem Befehl können Sie die Struktur einer externen Tabelle definieren. Die externe Tabelle kann alle oder 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');Ersetzen Sie Folgendes:
TABLENAME: Name der externen Tabelle in der lokalen Datenbank.COLUMNX_NAME: der AlloyDB-Spaltenname. Der Spaltenname muss genau mit dem Namen der entsprechenden Spalte in der BigQuery-Quelltabelle übereinstimmen.Xgibt an, dass die Tabelle mit mehreren Spalten erstellt werden kann. Der Name muss auch mit der genauen Groß-/Kleinschreibung der BigQuery-Spalte übereinstimmen. Wenn der BigQuery Spaltenname Großbuchstaben enthält, z. B.employeeID, muss die AlloyDB-Kennung in doppelten Anführungszeichen gesetzt werden, z. B."employeeID", um gemischte oder Großbuchstaben beizubehalten.DATA_TYPE: der Datentyp der Spalte.BIGQUERY_SERVER_NAME: eindeutige Kennung für den von Ihnen erstellten externen 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.
Nachdem die externe Tabelle erstellt wurde, können Sie sie genauso abfragen wie jede andere Tabelle in AlloyDB.
Daten importieren
So importieren Sie in BigQuery gespeicherte BigQuery- oder BigLake Iceberg-Daten in AlloyDB:
Suchen Sie eine vorhandene Datenquelle oder erstellen Sie eine integrierte BigQuery-Tabelle oder neue verwaltete Iceberg-Tabellen.
Erstellen Sie mit psql
local_table, indem Sie den folgenden Befehl ausführen:CREATE TABLE local_table AS (SELECT * from foreign_table);Mit diesem Befehl wird eine Kopie der BigQuery-Tabelle in einer lokalen AlloyDB-Standardtabelle erstellt. Je nach Workflow Ihrer Anwendung können Sie die PostgreSQL-Erweiterung
pg_cronso konfigurieren, dass die AlloyDB-Tabelle in regelmäßigen Abständen aktualisiert wird.
Zeitplan für den regelmäßigen Import von Daten einrichten
Wenn Sie BigQuery-Daten importieren, stellt bigquery_fdw eine Verbindung zur
externen Tabelle als externe Tabelle her. So können Sie die Daten mit CREATE TABLE ... AS (SELECT * FROM
foreign_table) in den lokalen
AlloyDB-Speicher kopieren.
Damit Ihre importierte Tabelle auf dem neuesten Stand bleibt, können Sie die Erweiterung pg_cron verwenden, um diese Abfrage regelmäßig auszuführen und die lokalen Daten nach einem Zeitplan zu aktualisieren.
So richten Sie einen Zeitplan für den regelmäßigen Import von BigQuery- oder BigLake Iceberg-Daten in AlloyDB ein:
- Konfigurieren Sie die Erweiterung
bigquery_fdw. - Aktivieren Sie die Erweiterung
pg_cronfür die AlloyDB-Instanz. Weitere Informationen finden Sie unter Unterstützte Datenbankerweiterungen.- Setzen Sie das Flag
alloydb.enable_pg_cronaufon. Weitere Informationen finden Sie unter alloydb.enable_pg_cron. - Setzen Sie das Flag
cron.database_nameauf den Datenbanknamen, in dem Sie die Erweiterungbigquery_fdwinstalliert haben und in dem Sie die SQL-Abfragen ausführen möchten, um die Daten zu aktualisieren. Weitere Informationen finden Sie unter Unterstützte Datenbank-Flags.
- Setzen Sie das Flag
Führen Sie die folgenden Befehle in der Datenbank aus, in der Sie die Erweiterung
bigquery_fdwinstalliert 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?.
Datentypzuordnungen
Wenn Sie mit bigquery_fdw eine externe Tabelle definieren, ordnen Sie BigQuery-Datentypen den entsprechenden PostgreSQL-Typen zu.
In der folgenden Tabelle sind die Datentypzuordnungen zwischen BigQuery und AlloyDB aufgeführt.
| BigQuery-Tabelle-Datentypen | Empfohlene PostgreSQL-Datentypen für externe Tabellen Datentypen |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Weitere Informationen finden Sie unter PostGIS_Geography. |
|
|
|
Weitere Informationen finden Sie unter |