Query federate Spanner

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

La federazione di BigQuery Spanner BigQuery per eseguire query sui dati che si trovano in Spanner in in tempo reale, senza copiare o spostare dati.

Prima di iniziare

  • Assicurati che l'amministratore BigQuery abbia creato connessione Spanner e condiviso 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. Devi inoltre chiedere all'amministratore di concederti uno dei seguenti:
    • 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 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.

Scegli la connessione giusta

Se sei un utente del controllo dell'accesso granulare di Spanner, quando esegui un query federata, devi utilizzare una query Connessione Spanner che specifica un ruolo del database. Poi tutte per le query eseguite con questa connessione utilizzano questo ruolo di database.

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

Spanner Data Boost

Data Boost è una funzionalità serverless completamente gestita che fornisce e risorse di computing 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 è avrà un impatto maggiore quando esegui query ad hoc complesse o quando vuoi elaborare grandi quantità di dati senza influire sullo Spanner esistente carico di lavoro. 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 abilitare l'accesso a Data Boost, chiedi all'amministratore di concederti Ruolo IAM Amministratore database Cloud Spanner (roles/spanner.databaseAdmin) per il database Spanner. Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.

Questo ruolo predefinito contiene spanner.databases.useDataBoost, che è necessaria per attivare l'accesso a Data Boost.

Potresti anche riuscire a ottenere questa autorizzazione con ruoli personalizzati e altri ruoli predefiniti.

Attiva Data Boost

Per abilitare Data Boost sulle tue query federate in Spanner, devi prima creare una connessione a Spanner. Dopo aver abilitato Data Boost all'interno della connessione, esegui una query sui dati per inviare una query federata a Spanner.

Query sui dati

Per inviare una query federata a Spanner da un query GoogleSQL, utilizza EXTERNAL_QUERY personalizzata.

Formula la 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;

Lettura di dati in parallelo

Spanner può dividere determinate query in parti più piccole oppure e recuperare le partizioni in parallelo. Per ulteriori informazioni, vedi Leggi i dati in parallelo nel documentazione di Spanner.

Per abilitare le letture parallele nelle query federate, configura questa impostazione quando crea la risorsa di connessione. Questa opzione divide la query SQL in partizioni più piccole e recupera ogni in parallelo. Tuttavia, questa opzione è limitata alle query che soddisfano una delle seguenti condizioni:

Le altre query restituiscono un errore. Per visualizzare il piano di esecuzione delle query per la query Spanner, Scopri come Spanner esegue le query.

Gestisci la priorità di esecuzione delle query

Puoi assegnare la priorità (high, medium o low) a singole query, specificando l'opzione query_execution_priority, come mostrato di seguito:

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 vengono eseguite secondo il criterio del "best effort" e potrebbero essere prerilasciate in background, ad esempio i backup pianificati.

Visualizza lo schema di una tabella Spanner

Puoi utilizzare la funzione EXTERNAL_QUERY per eseguire query sulle viste information_schema accedere ai metadati del database, ad esempio elenca tutte le tabelle nel database o uno schema di tabella. L'esempio seguente restituisce informazioni sulle colonne in 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:

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 nella directory principale.
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 ulteriori 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