Query federate AlloyDB
In qualità di analista di dati, puoi eseguire query sui dati in AlloyDB per PostgreSQL da BigQuery utilizzando le query federate.
La federazione BigQuery AlloyDB consente a BigQuery di eseguire query sui dati presenti in AlloyDB in tempo reale senza copiarli o spostarli.
Prima di iniziare
- Assicurati che l'amministratore 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 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 funzione EXTERNAL_QUERY.
Supponiamo di archiviare una tabella dei clienti in BigQuery, mentre
di archiviare una tabella delle vendite in AlloyDB e di voler unire le due tabelle in
una singola query. Il seguente esempio esegue una query federata su una tabella AlloyDB denominata orders e unisce i risultati a una tabella BigQuery denominata mydataset.customers.
La query di esempio include tre 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 alla 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;
Visualizzare 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 ulteriori informazioni, consulta la sezione 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';");
Monitorare le query federate 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 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 durante l'invio di una query federata ad AlloyDB e fornisce possibili soluzioni per la risoluzione dei problemi.
Problema: impossibile connettersi al server di database con questo errore:
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 seguito tutti i prerequisiti
durante la creazione della connessione ad AlloyDB.
Verifica che il account di servizio creato automaticamente
quando viene creata una connessione ad AlloyDB
abbia il ruolo Client AlloyDB (roles/alloydb.client).
Per saperne di più, vedi
Concedere 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.