Query federate di Cloud SQL
In qualità di analista di dati, puoi eseguire query sui dati in Cloud SQL da BigQuery utilizzando query federate.
La federazione Cloud SQL di BigQuery consente a BigQuery eseguire query sui dati presenti in Cloud SQL in tempo reale, senza copiare o trasferire i dati. La federazione delle query supporta sia MySQL (2a generazione) che PostgreSQL in Cloud SQL.
In alternativa, per replicare i dati BigQuery, puoi anche utilizzare Cloud Data Fusion Datastream. Per ulteriori informazioni sull'utilizzo Cloud Data Fusion, consulta Replicare i dati da MySQL a BigQuery.
Prima di iniziare
- Assicurati che l'amministratore BigQuery abbia creato una connessione Cloud SQL e condiviso con te.
-
Per ottenere le autorizzazioni necessarie per eseguire query su un'istanza Cloud SQL, chiedi all'amministratore di concederti Ruolo IAM Utente connessione BigQuery (
roles/bigquery.connectionUser
) nel progetto. Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.Potresti anche riuscire a ottenere le autorizzazioni richieste tramite la ruoli o altri ruoli predefiniti ruoli.
Query sui dati
Per inviare una query federata a Cloud SQL da un
query GoogleSQL, utilizza
Funzione EXTERNAL_QUERY
.
Supponi di archiviare una tabella di clienti in BigQuery, mentre
una tabella delle vendite in Cloud SQL e vuoi unirla
una singola query. L'esempio seguente esegue una query federata per un
tabella Cloud SQL denominata orders
e unisce i risultati con un
Tabella BigQuery denominata mydataset.customers
.
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;
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_id
nel Database PostgreSQL per ottenere la data del primo ordine per ogni cliente la funzioneEXTERNAL_QUERY()
. - Unire la tabella dei risultati della query esterna alla tabella dei clienti nel
BigQuery di
customer_id
. - Seleziona i dati del cliente e la data del primo ordine.
Visualizza uno schema della tabella Cloud SQL
Puoi utilizzare la funzione EXTERNAL_QUERY()
per eseguire query su tabelle information_schema
per accedere ai metadati del database, ad esempio elenca tutte le tabelle nel database o
schema della tabella. Le seguenti query information_schema d'esempio funzionano in
MySQL e PostgreSQL. Puoi scoprire di più su
Tabelle information_schema MySQL
e
Tabelle information_schema di PostgreSQL.
-- List all tables in a database.
SELECT * FROM EXTERNAL_QUERY("connection_id",
"select * from information_schema.tables;");
-- List all columns in a table.
SELECT * FROM EXTERNAL_QUERY("connection_id",
"select * from information_schema.columns where table_name='x';");
Dettagli connessione
La tabella seguente mostra le proprietà di connessione Cloud SQL:
Nome proprietà | Valore | Descrizione |
---|---|---|
name |
string | Nome della risorsa di connessione nel formato: project_id.location_id.connection_id. |
location |
string | Località della connessione, uguale alla località dell'istanza Cloud SQL, con le seguenti eccezioni: Cloud SQL us-central1 viene mappato a BigQuery negli Stati Uniti, Cloud SQL europe-west1 a BigQuery EU. |
friendlyName |
string | Un nome visualizzato semplice per la connessione. |
description |
string | Descrizione della connessione. |
cloudSql.type |
string | Può essere "POSTGRES" o "MYSQL". |
cloudSql.instanceId |
string | Nome dell'istanza Cloud SQL, solitamente nel formato:Project-id:location-id:instance-id Puoi trovare l'ID istanza nella pagina dei dettagli dell'istanza Cloud SQL. |
cloudSql.database |
string | Il database Cloud SQL a cui vuoi connetterti. |
cloudSql.serviceAccountId |
string | L'account di servizio configurato per accedere al database Cloud SQL. |
La tabella seguente mostra le proprietà della credenziale dell'istanza Cloud SQL:
Nome proprietà | Valore | Descrizione |
---|---|---|
username |
string | Nome utente database |
password |
string | Password database |
Tieni traccia delle query federate di BigQuery
Quando esegui una query federata su Cloud SQL, 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 su un database MySQL o PostgreSQL, 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="cloudsql_database" textPayload=~"Federated query from BigQuery"
Fai clic su Esegui query.
Se sono disponibili record per le query federate di BigQuery, In Risultati delle query viene visualizzato un elenco di record simili 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 */
Risoluzione dei problemi
Questa sezione ti aiuta a risolvere i problemi che potresti riscontrare durante l'invio una query federata a Cloud SQL.
Problema: impossibile connettersi al server di database. Se esegui una query su un database MySQL database, potresti riscontrare il seguente errore:
Invalid table-valued function EXTERNAL_QUERY Failed to connect to MySQL database. Error: MysqlErrorCode(2013): Lost connection to MySQL server during query.
In alternativa, se esegui una query su un database PostgreSQL, potresti riscontrare il seguente 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 utilizzare credenziali valide e tutti i prerequisiti
sono stati seguiti per creare la connessione per Cloud SQL.
Controlla se
e l'account di servizio creato automaticamente
quando viene stabilita una connessione a Cloud SQL
create ha il ruolo Client Cloud SQL (
roles/cloudsql.client
). Il servizio l'account ha il seguente formato:service-PROJECT_NUMBER@gcp-sa-bigqueryconnection.iam.gserviceaccount.com
. Per istruzioni dettagliate, vedi Concedi l'accesso all'account di servizio.
Passaggi successivi
- Scopri di più sulle query federate.
- Scopri di più sulla mappatura dei tipi di dati da MySQL a BigQuery.
- Scopri di più sulla mappatura dei tipi di dati da PostgreSQL a BigQuery.
- Scopri di più sui tipi di dati non supportati.