Query federate Spanner
In qualità di analista di dati, puoi eseguire query sui dati in Spanner da BigQuery utilizzando le query federate.
La federazione BigQuery Spanner consente a BigQuery di eseguire query in tempo reale sui dati presenti in Spanner, senza copiare o spostare i 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 subquery. Tuttavia, nessun dato viene spostato da Spanner allo spazio di archiviazione BigQuery.
Se crei un set di dati esterno, non devi creare una connessione per eseguire query sui dati Spanner.
Utilizzare la funzione EXTERNAL_QUERY
Come per altri database federati, puoi anche eseguire query sui dati Spanner
con una funzione EXTERNAL_QUERY
. Questo può essere utile se vuoi eseguire query sul database Spanner
che utilizza il dialetto PostgreSQL o se vuoi avere un maggiore controllo sui
parametri di connessione.
Prima di iniziare
- Assicurati che l'amministratore BigQuery abbia creato una connessione Spanner e l'abbia condivisa con te. Consulta Scegliere la connessione giusta.
- Per ottenere le autorizzazioni necessarie per eseguire query su un'istanza Spanner, chiedi all'amministratore di concederti il ruolo IAM Utente connessione BigQuery (
roles/bigquery.connectionUser
). Devi anche chiedere all'amministratore di concederti una delle seguenti opzioni:- Se utilizzi il controllo dell'accesso dell'accesso granulare, devi disporre dell'accesso a un
ruolo del database con il privilegio
SELECT
su tutti gli oggetti schema Spanner nelle tue query. - Se non sei un utente del controllo dell'accesso granulare, devi disporre del ruolo IAM Lettore database Cloud Spanner (
roles/spanner.databaseReader
).
Per informazioni sulla concessione dei ruoli IAM, consulta Gestire l'accesso a progetti, cartelle e organizzazioni. Per informazioni sul controllo dell'accesso granulare, vedi Informazioni sul controllo dell'accesso granulare.
- Se utilizzi il controllo dell'accesso dell'accesso granulare, devi disporre dell'accesso a un
ruolo del database con il privilegio
Scegliere la connessione giusta
Se sei un utente controllo dell'accesso granulare di Spanner, quando esegui una query federata con una funzione EXTERNAL_QUERY
, devi utilizzare una connessione Spanner che specifica un ruolo del database. Tutte le query
che esegui con questa connessione utilizzano questo ruolo del database.
Se utilizzi una connessione che non specifica un ruolo di 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 la funzione
EXTERNAL_QUERY
.
Formula la query Spanner in GoogleSQL o PostgreSQL, a seconda del dialetto specificato del database.
L'esempio seguente esegue una query federata su un database Spanner
denominato orders
e unisce i risultati a una 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( '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 workload Spanner supportati. Data Boost ti consente di eseguire query di analisi ed esportazioni di dati con un impatto quasi nullo sui carichi di lavoro esistenti nell'istanza Spanner di cui è stato eseguito il provisioning. Data Boost ti consente di eseguire query federate con capacità di computing indipendente separata dalle istanze di cui è stato eseguito il provisioning per 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 workload Spanner esistente. L'esecuzione di query federate con Data Boost può comportare un consumo di CPU notevolmente inferiore e, in alcuni casi, una latenza delle query inferiore.
Prima di iniziare
Per ottenere l'autorizzazione necessaria per abilitare l'accesso a Data Boost, chiedi all'amministratore di concederti il ruolo IAM Cloud Spanner Database Reader with DataBoost (roles/spanner.databaseReaderWithDataBoost
) nel database Spanner.
Per saperne di più sulla concessione dei ruoli, consulta Gestisci 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.
Abilitare Data Boost
Quando utilizzi set di dati esterni, Data Boost viene sempre utilizzato e non devi attivarlo manualmente.
Se vuoi utilizzare Data Boost per le tue query EXTERNAL_QUERY
, devi attivarlo quando crei una connessione utilizzata dalla query.
Lettura di dati in parallelo
Spanner può dividere alcune query in parti più piccole, o partizioni, e recuperare le partizioni in parallelo. Per saperne di più, consulta Lettura parallela dei dati 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 Distributed Union.
Non è presente alcun operatore Distributed Union nel piano di esecuzione.
Le altre query restituiscono un errore. Per visualizzare il piano di esecuzione query per una query Spanner, consulta Comprendere come Spanner esegue le query.
Quando esegui query federate con set di dati esterni, viene sempre utilizzata l'opzione "Leggi i dati in parallelo".
Per attivare le letture parallele quando utilizzi
EXTERNAL_QUERY
,
attivala 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
) alle 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 best-effort e potrebbero essere interrotte dal caricamento in background, ad esempio dai backup pianificati.
Quando esegui query federate con set di dati esterni, tutte le query hanno sempre la priorità medium
.
Visualizzare 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 visualizzare gli schemi anche senza definire set di dati esterni. Puoi utilizzare la funzione EXTERNAL_QUERY
anche per eseguire query sulle viste 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 saperne di più, consulta i seguenti riferimenti allo schema delle informazioni nella documentazione di Spanner:
Prezzi
- Per quanto riguarda BigQuery, vengono applicati i prezzi standard delle query federate.
- Sul lato Spanner, le query sono soggette ai prezzi di Spanner.
Query tra regioni
BigQuery supporta le query federate in cui le istanze Spanner e i set di dati BigQuery si trovano in regioni diverse. Queste query comportano un addebito aggiuntivo per il trasferimento dei dati di Spanner. Per ulteriori informazioni, consulta la pagina Prezzi di Spanner.
Durante il periodo di anteprima, non ti vengono addebitati costi per il trasferimento dei dati, ma puoi visualizzare il tuo utilizzo con i seguenti SKU:
- Trasferimento di dati tra zone all'interno della regione in uscita dalla rete
- Trasferimento di dati in uscita tra regioni della rete di istanze gratuito verso lo stesso continente
- Trasferimento di dati in uscita tra regioni di rete di istanze gratuite verso un continente diverso
Il trasferimento dei dati viene addebitato in base alla regione BigQuery in cui esegui la query e alla regione Spanner più vicina con repliche di lettura/scrittura o di sola lettura.
Per le configurazioni multiregionali di BigQuery
(US
o EU
), i costi di trasferimento dei dati da Spanner sono determinati come segue:
- Regione multiregionale BigQuery
US
: regione Spannerus-central1
- Regione multiregionale BigQuery
EU
: regione Spannereurope-west1
Ad esempio:
- BigQuery (multiregione
US
) e Spanner (us-central1
): Vengono applicati costi per il trasferimento dei dati all'interno della stessa regione. - BigQuery (più regioni
US
) e Spanner (us-west4
): si applicano costi per il trasferimento dei dati tra regioni all'interno dello stesso continente.
Risoluzione dei problemi
Questa sezione ti aiuta a risolvere i problemi che potresti riscontrare quando invii una query federata a Spanner.
- Problema: la query non è partizionabile in base alla radice.
- Risoluzione:se configuri la connessione per leggere i dati in parallelo, il primo operatore nel piano di esecuzione della query deve essere un'unione distribuita oppure il piano di esecuzione non deve contenere unioni distribuite. Per risolvere questo errore, visualizza il piano di esecuzione della query e riscrivila. Per ulteriori informazioni, consulta Informazioni su 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 partizionabile dalla radice. Per ulteriori informazioni, consulta la sezione Informazioni su 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ù sul mapping dei tipi di dati da Spanner a BigQuery.