Query federate di Spanner
In qualità di analista di dati, puoi eseguire query sui dati in Spanner da BigQuery utilizzando query federate.
La federazione di BigQuery Spanner a BigQuery per eseguire query sui dati che si trovano in Spanner in tempo reale, senza copiare o spostare dati.
Puoi eseguire query sui dati Spanner in due modi:
- Crea un set di dati esterno Spanner.
- Utilizza una funzione
EXTERNAL_QUERY
.
Utilizzare set di dati esterni
Il modo più semplice per eseguire query sulle tabelle Spanner è creare un set di dati esterno. Una volta creato il set di dati esterno, le tabelle del database Spanner corrispondente sono visibili in BigQuery e puoi utilizzarle nelle query, ad esempio in join, unioni o sottoquery. Tuttavia, nessun dato viene spostato da Spanner allo spazio di archiviazione BigQuery.
Non è necessario creare una connessione per eseguire query sui dati di Spanner se crei un set di dati esterno.
Utilizzare la funzione EXTERNAL_QUERY
Come per altri database federati, puoi anche eseguire query sui dati di Spanner con una funzione EXTERNAL_QUERY
. Questo può essere utile se vuoi eseguire query su Spanner
che utilizza il dialetto PostgreSQL o che vuole avere un maggiore controllo
parametri di connessione.
Prima di iniziare
- Assicurati che l'amministratore di BigQuery abbia creato una connessione Spanner e la abbia condivisa con te. Vedi Scegli la connessione giusta.
- Per ottenere le autorizzazioni necessarie per eseguire query su Spanner
chiedi all'amministratore di concederti la connessione BigQuery
Identity and Access Management (IAM) per gli utenti (
roles/bigquery.connectionUser
) ruolo. Inoltre, devi chiedere all'amministratore di concederti uno dei seguenti ruoli:- Se sei un utente con controllo dell'accesso granulare, devi avere accesso a un
ruolo di database con il privilegio
SELECT
per tutti Oggetti schema Spanner nelle query. - Se non sei un utente con un controllo dell'accesso granulare, hai bisogno di Cloud Spanner
Lettore database (
roles/spanner.databaseReader
) ruolo IAM.
Per informazioni sulla concessione dei ruoli IAM, consulta Gestire l'accesso a progetti, cartelle e organizzazioni. Per informazioni sul controllo dell'accesso granulare, consulta Informazioni sul controllo dell'accesso granulare.
- Se sei un utente con controllo dell'accesso granulare, devi avere accesso a un
ruolo di database con il privilegio
Scegliere la connessione giusta
Se sei un utente con controllo dell'accesso granulare di Spanner, quando esegui una query federata con una funzione EXTERNAL_QUERY
, devi utilizzare una connessione Spanner che specifichi un ruolo database. Poi tutte
per le query eseguite con questa connessione
utilizzano questo ruolo di database.
Se utilizzi una connessione che non specifica un ruolo del database, devi disporre dei ruoli IAM indicati in Prima di iniziare.
Query sui dati
Per inviare una query federata a Spanner da una query GoogleSQL, utilizza il comando
EXTERNAL_QUERY
personalizzata.
Formula la tua query Spanner in GoogleSQL o PostgreSQL, a seconda del dialetto specificato del database.
L'esempio seguente esegue una query federata in uno Spanner
denominato orders
e unisce i risultati a un database BigQuery
tabella denominata mydataset.customers
.
SELECT c.customer_id, c.name, rq.first_order_date FROM mydataset.customers AS c LEFT OUTER JOIN EXTERNAL_QUERY( 'my-project.us.example-db', '''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;
Spanner Data Boost
Data Boost è una funzionalità serverless completamente gestita che fornisce risorse di calcolo indipendenti per i carichi di lavoro Spanner supportati. Data Boost consente di eseguire query di analisi ed esportazioni dei dati con un impatto quasi zero sui carichi di lavoro esistenti Spanner. Data Boost consente di eseguire query federate con capacità di calcolo indipendente e separata dalle istanze di cui è stato eseguito il provisioning evitare di influire sui carichi di lavoro esistenti su Spanner. Data Boost è più efficace quando esegui query ad hoc complesse o quando vuoi elaborare grandi quantità di dati senza influire sul carico di lavoro Spanner esistente. L'esecuzione di query federate con Data Boost può generare un consumo della CPU notevolmente inferiore e, in alcuni casi, una latenza delle query inferiore.
Prima di iniziare
Per ottenere l'autorizzazione necessaria per attivare l'accesso a Data Boost,
chiedi all'amministratore di concederti il ruolo IAM Amministratore del database Cloud Spanner (roles/spanner.databaseAdmin
) nel database Spanner.
Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.
Questo ruolo predefinito contiene l'autorizzazione
spanner.databases.useDataBoost
necessaria per attivare l'accesso a Data Boost.
Potresti anche ottenere questa autorizzazione con ruoli personalizzati o altri ruoli predefiniti.
Attiva Data Boost
Quando si utilizzano set di dati esterni, Data Boost viene sempre utilizzato e non è necessario abilitarlo manualmente.
Se vuoi utilizzare il potenziamento dei dati per le query EXTERNAL_QUERY
, devi attivarlo quando crei una connessione utilizzata dalla query.
Lettura di dati in parallelo
Spanner può dividere determinate query in parti più piccole oppure e recuperare le partizioni in parallelo. Per ulteriori informazioni, consulta Leggere i dati in parallelo nella documentazione di Spanner.
Tuttavia, questa opzione è limitata alle query che soddisfano una delle seguenti condizioni:
Il primo operatore nel piano di esecuzione è un operatore di Distributed Union.
Non sono presenti unione distribuita dell'operatore nel piano di esecuzione.
Le altre query restituiscono un errore. Per visualizzare il piano di esecuzione delle query per la query Spanner, Scopri come Spanner esegue le query.
Durante l'esecuzione di query federate con set di dati esterni, la sezione "Lettura di dati in parallelo" viene sempre utilizzata.
Per attivare le letture parallele quando utilizzi il EXTERNAL_QUERY
, attivalo quando crei la connessione.
Gestire la priorità di esecuzione delle query
Quando esegui query federate con una funzione EXTERNAL_QUERY
, puoi assegnare la priorità (high
, medium
o low
) a singole query specificando l'opzione query_execution_priority
:
SELECT * FROM EXTERNAL_QUERY( 'my-project.us.example-db', '''SELECT customer_id, MIN(order_date) AS first_order_date FROM orders GROUP BY customer_id''', '{"query_execution_priority":"high"}');
La priorità predefinita è medium
.
Le query con priorità high
competeranno con il traffico transazionale.
Le query con priorità low
sono di tipo best effort e potrebbero essere prelevate dal carico in background, ad esempio dai backup pianificati.
Quando esegui query federate con set di dati esterni, tutte le query hanno sempre la priorità medium
.
Visualizza lo schema di una tabella Spanner
Se utilizzi set di dati esterni, le tabelle Spanner sono visibili direttamente in BigQuery Studio e puoi visualizzarne gli schemi.
Tuttavia, puoi anche visualizzare gli schemi senza definire set di dati esterni. Puoi utilizzare la funzione EXTERNAL_QUERY
anche per eseguire query sulle visualizzazioni information_schema per accedere ai metadati del database. Il seguente esempio restituisce informazioni sulle colonne della tabella MyTable
:
Database Google SQL
SELECT * FROM EXTERNAL_QUERY( 'my-project.us.example-db', '''SELECT t.column_name, t.spanner_type, t.is_nullable FROM information_schema.columns AS t WHERE t.table_catalog = '' AND t.table_schema = '' AND t.table_name = 'MyTable' ORDER BY t.ordinal_position ''');
Database PostgreSQL
SELECT * from EXTERNAL_QUERY( 'my-project.us.postgresql.example-db', '''SELECT t.column_name, t.data_type, t.is_nullable FROM information_schema.columns AS t WHERE t.table_schema = 'public' and t.table_name='MyTable' ORDER BY t.ordinal_position ''');
Per ulteriori informazioni, consulta i seguenti riferimenti allo schema di informazioni nel Documentazione Spanner:
Prezzi
- Per BigQuery, si applicano i prezzi delle query federate standard.
- Sul lato di Spanner, le query sono soggette ai prezzi di Spanner.
- I prezzi potrebbero cambiare quando si passa dalla fase di anteprima alla disponibilità generale
Risoluzione dei problemi
Questa sezione ti aiuta a risolvere i problemi che potresti riscontrare durante l'invio una query federata in Spanner.
- Problema: la query non è partizionabile in root.
- Risoluzione: se configuri la connessione per leggere i dati in parallelo, il primo operatore nel piano di esecuzione della query deve essere un oppure il tuo piano di esecuzione non deve avere sindacati distribuiti. Da risolvere questo errore, visualizza il piano di esecuzione della query e riscrivi la query. Per maggiori informazioni le informazioni, vedi Scopri come Spanner esegue le query.
- Problema: scadenza superata.
- Risoluzione:seleziona l'opzione per leggere i dati in parallelo e riscrivere la query in modo che sia root partizionabili. Per ulteriori informazioni, vedi Scopri come Spanner esegue le query.
Passaggi successivi
- Scopri di più sulla creazione di set di dati esterni Spanner
- Scopri di più sulle query federate.
- Scopri di più sulla mappatura dei tipi di dati da Spanner a BigQuery.