Query federate Spanner

In qualità di analista di dati, puoi eseguire query sui dati in Spanner da BigQuery utilizzando query federate.

La federazione BigQuery Spanner consente a BigQuery di eseguire query sui dati che risiedono in Spanner in tempo reale, senza copiare o spostare i dati.

Puoi eseguire query sui dati di Spanner in due modi:

  • Crea un set di dati esterno Spanner.
  • Utilizza una EXTERNAL_QUERY funzione.

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 EXTERNAL_QUERY funzione. Questa opzione può essere utile se vuoi avere un maggiore controllo sui parametri di connessione.

Prima di iniziare

  • Assicurati che l'amministratore di BigQuery abbia creato una connessione Spanner e 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 uno dei seguenti:
    • Se sei un utente del controllo dell'accesso granulare, devi avere accesso a un ruolo del database con il SELECT privilegio su tutti gli oggetti schema Spanner nelle query.
    • Se non sei un utente del controllo dell'accesso granulare, devi avere il 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, consulta Informazioni sul controllo dell'accesso granulare.

Scegliere la connessione giusta

Se sei un utente del 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 del database. Tutte le query eseguite con questa connessione utilizzano questo ruolo del database.

Se utilizzi una connessione che non specifica un ruolo del database, devi disporre dei ruoli IAM indicati in Prima di iniziare.

Esegui query sui dati

Per inviare una query federata a Spanner da una query GoogleSQL, utilizza la EXTERNAL_QUERY funzione.

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 con 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 computing indipendenti per i carichi di lavoro Spanner supportati. Data Boost consente di eseguire query di analisi ed esportazioni di dati con un impatto quasi nullo sui carichi di lavoro esistenti sull'istanza Spanner di cui è stato eseguito il provisioning. Data Boost 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 carico di lavoro 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 Lettore database Cloud Spanner con DataBoost (roles/spanner.databaseReaderWithDataBoost) sul database Spanner. Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.

Questo ruolo predefinito contiene l' spanner.databases.useDataBoost autorizzazione, necessaria per abilitare 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 abilitarlo manualmente.

Se vuoi utilizzare Data Boost per le query EXTERNAL_QUERY, devi abilitarlo 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 ulteriori informazioni, incluso un elenco di limitazioni, consulta la sezione Lettura di dati in parallelo nella documentazione di Spanner.

Per visualizzare il piano di esecuzione delle query per una query Spanner, consulta la sezione Comprendere come Spanner esegue le query.

Quando esegui query federate con set di dati esterni, viene sempre utilizzata l'opzione "Leggi dati in parallelo".

Per abilitare le letture parallele quando utilizzi le EXTERNAL_QUERY, abilita questa opzione 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 competono con il traffico transazionale. Le query con priorità low sono di tipo 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 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. L'esempio seguente restituisce informazioni sulle colonne della tabella MyTable:

Database GoogleSQL

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 informativo nella documentazione di Spanner:

Prezzi

  • Per quanto riguarda BigQuery, vengono applicati i prezzi standard delle query federate.
  • Per quanto riguarda 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 costo aggiuntivo per il trasferimento dei dati di Spanner. Per ulteriori informazioni, consulta la sezione Prezzi di Spanner.

Il trasferimento dei dati viene addebitato in base ai seguenti SKU:

  • Trasferimento di dati in uscita dalla rete tra zone all'interno della regione
  • Trasferimento di dati in uscita dalla rete tra regioni verso lo stesso continente
  • Trasferimento di dati in uscita dalla rete tra regioni 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 che dispone di 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 Spanner us-central1
  • Regione multiregionale BigQuery EU: regione Spanner europe-west1

Ad esempio:

  • BigQuery (regione multiregionale US) e Spanner (us-central1): vengono applicati i costi per il trasferimento dei dati all'interno della stessa regione.
  • BigQuery (regione multiregionale US) e Spanner (us-west4): vengono applicati i 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 alla radice.
Soluzione: 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 avere unioni distribuite. Per risolvere questo errore, visualizza il piano di esecuzione della query e riscrivi la query. Per ulteriori informazioni, consulta la sezione Comprendere come Spanner esegue le query.
Problema: scadenza superata.
Soluzione: seleziona l'opzione per leggere i dati in parallelo e riscrivi la query in modo che sia partizionabile alla radice. Per ulteriori informazioni, consulta la sezione Comprendere come Spanner esegue le query.

Passaggi successivi