Query federate di AlloyDB
In qualità di analista di dati, puoi eseguire query sui dati in AlloyDB per PostgreSQL da BigQuery utilizzando query federate.
La federazione BigQuery AlloyDB consente a BigQuery di eseguire query sui dati che risiedono in AlloyDB in tempo reale senza copiare o spostare i dati.
Prima di iniziare
- Assicurati che l'amministratore di BigQuery abbia creato una connessione AlloyDB e l'abbia condivisa con te.
-
Per ottenere le autorizzazioni necessarie per eseguire query su un'istanza AlloyDB, chiedi all'amministratore di concederti il ruolo IAM Utente connessione BigQuery (
roles/bigquery.connectionUser) nel tuo progetto. Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Esegui query sui dati
Per inviare una query federata ad AlloyDB da una
query GoogleSQL, utilizza la
EXTERNAL_QUERY funzione.
Supponiamo che tu memorizzi una tabella dei clienti in BigQuery, mentre memorizzi una tabella delle vendite in AlloyDB e che tu voglia unire le due tabelle in un'unica query. Il seguente esempio esegue una query federata su una tabella AlloyDB denominata orders e unisce i risultati con una tabella BigQuery denominata mydataset.customers.
La query di esempio include 3 parti:
Esegui la query esterna
SELECT customer_id, MIN(order_date) AS first_order_date FROM orders GROUP BY customer_idnel database AlloyDB per ottenere la data del primo ordine per ogni cliente tramite la funzioneEXTERNAL_QUERY.Unisci la tabella dei risultati della query esterna con la tabella dei clienti in BigQuery per
customer_id.Seleziona i dati del cliente e la data del primo ordine nel set di risultati finale.
SELECT c.customer_id, c.name, rq.first_order_date
FROM mydataset.customers AS c
LEFT OUTER JOIN EXTERNAL_QUERY(
'us.connection_id',
'''SELECT customer_id, MIN(order_date) AS first_order_date
FROM orders
GROUP BY customer_id''') AS rq ON rq.customer_id = c.customer_id
GROUP BY c.customer_id, c.name, rq.first_order_date;
Visualizza lo schema di una tabella AlloyDB
Puoi utilizzare la funzione EXTERNAL_QUERY per eseguire query sulle tabelle information_schema per accedere ai metadati del database. Ad esempio, puoi elencare tutte le tabelle nel database o visualizzare lo schema della tabella. Per saperne di più, consulta le tabelle information_schema di PostgreSQL .
-- List all tables in a database.
SELECT * FROM EXTERNAL_QUERY("region.connection_id",
"select * from information_schema.tables;");
-- List all columns in a table.
SELECT * FROM EXTERNAL_QUERY("region.connection_id",
"select * from information_schema.columns where table_name='x';");
Monitora le query federate di BigQuery
Quando esegui una query federata su AlloyDB, BigQuery annota la query con un commento simile al seguente:
/* Federated query from BigQuery. Project ID: PROJECT_ID, BigQuery Job ID: JOB_ID. */
Se monitori i log per l'utilizzo delle query, la seguente annotazione può aiutarti a identificare le query provenienti da BigQuery.
Vai alla pagina Esplora log.
Nella scheda Query, inserisci la seguente query:
resource.type="alloydb.googleapis.com/Instance" textPayload=~"Federated query from BigQuery"Fai clic su Esegui query.
Se sono disponibili record per le query federate di BigQuery, in Risultati query viene visualizzato un elenco di record simile al seguente.
YYYY-MM-DD hh:mm:ss.millis UTC [3210064]: [4-1] db=DATABASE, user=USER_ACCOUNT STATEMENT: SELECT 1 FROM (SELECT FROM company_name_table) t; /* Federated query from BigQuery. Project ID: PROJECT_ID, BigQuery Job ID: JOB_ID */ YYYY-MM-DD hh:mm:ss.millis UTC [3210532]: [2-1] db=DATABASE, user=USER_ACCOUNT STATEMENT: SELECT "company_id", "company type_id" FROM (SELECT FROM company_name_table) t; /* Federated query from BigQuery. Project ID: PROJECT_ID, BigQuery Job ID: JOB_ID */
Per saperne di più su Cloud Logging, consulta Cloud Logging.
Risoluzione dei problemi
Questa sezione descrive i potenziali errori che potresti riscontrare quando invii una query federata ad AlloyDB e fornisce possibili soluzioni per la risoluzione dei problemi.
Problema: Failed to connect to the database server with this error:
Invalid table-valued function EXTERNAL_QUERY Connect to PostgreSQL server failed: server closed the connection unexpectedly. This probably means the server terminated abnormally before or while processing the request.
Soluzione: assicurati di aver utilizzato credenziali valide e di aver rispettato tutti i prerequisiti
durante la creazione della connessione ad AlloyDB.
Verifica se il account di servizio creato automaticamente quando viene creata una connessione ad AlloyDB ha il ruolo Cliente AlloyDB (roles/alloydb.client).
Per saperne di più, consulta
Concedi l'accesso al service account.
Passaggi successivi
- Scopri di più sulle query federate.
- Scopri di più sul mapping dei tipi di dati da PostgreSQL a BigQuery.
- Scopri di più sui tipi di dati non supportati.