Query globali
Le query globali consentono di eseguire query SQL che fanno riferimento a dati archiviati in più di una regione.
Ad esempio, puoi eseguire una query globale che unisce una tabella che si trova in us-central1
con una tabella che si trova in europe-central2. Questo documento spiega come abilitare ed eseguire query globali nel tuo progetto.
Prima di iniziare
Verifica che le query globali siano abilitate per il tuo progetto e assicurati di disporre delle autorizzazioni necessarie per eseguirle.
Abilita le query globali
Per attivare le query globali per il tuo progetto o la tua organizzazione, utilizza l'istruzione
ALTER PROJECT SET OPTIONS
o l'istruzione ALTER ORGANIZATION SET OPTIONS
per modificare la configurazione predefinita.
- Per eseguire query globali in una regione, imposta l'argomento
enable_global_queries_executionsutruein quella regione per un progetto in cui viene eseguita la query. - Per consentire alle query globali di copiare i dati da una regione, imposta l'argomento
enable_global_queries_data_accesssutruein quella regione per un progetto in cui sono archiviati i dati. - Le query globali possono essere eseguite in un progetto ed estrarre dati da altre regioni di un altro progetto.
Il seguente esempio mostra come modificare queste impostazioni a livello di progetto. Supponiamo che tu voglia eseguire query globali nella regione REGION_1 nel progetto PROJECT_1_ID e recuperare i dati da REGION_2 nel progetto PROJECT_2_ID:
ALTER PROJECT `PROJECT_1_ID` SET OPTIONS ( `region-REGION_1.enable_global_queries_execution` = true ); ALTER PROJECT `PROJECT_2_ID` SET OPTIONS ( `region-REGION_2.enable_global_queries_data_access` = true );
Sostituisci quanto segue:
PROJECT_1_ID: il nome del progetto in cui verranno eseguite le query globaliREGION_1: la regione in cui verranno eseguite le query globaliPROJECT_2_ID: il nome del progetto da cui le query globali estraranno i datiREGION_2: la regione da cui le query globali estraggono i dati
Potrebbero essere necessari diversi minuti prima che la modifica diventi effettiva.
Autorizzazione obbligatoria
Per eseguire una query globale, devi disporre dell'autorizzazione bigquery.jobs.createGlobalQuery.
Il ruolo BigQuery Admin è l'unico ruolo predefinito che contiene questa autorizzazione. Per concedere l'autorizzazione a eseguire query globali senza concedere il ruolo Amministratore BigQuery:
- Crea un ruolo personalizzato, ad esempio "Esecutore query globali BigQuery".
- Aggiungi
bigquery.jobs.createGlobalQuerya questo ruolo. - Assegna questo ruolo agli utenti o ai service account selezionati.
Esegui query sui dati
Per eseguire una query globale, scrivi una query SQL come se i dati si trovassero in un'unica località. Se i dati a cui fa riferimento la query sono archiviati in più di una località, BigQuery tenta di eseguire una query globale. In alcuni casi, BigQuery seleziona automaticamente la località della query. In caso contrario, devi specificare la località in cui eseguire la query. I dati a cui fa riferimento la query che non si trovano nella località selezionata vengono copiati in quella località.
L'esempio seguente viene eseguito come query globale che unisce tabelle di due set di dati diversi archiviati in due posizioni diverse:
SELECT id, tr_date, product_id, price FROM us_dataset.transactions
UNION ALL
SELECT id, tr_date, product_id, price FROM europe_dataset.transactions
Selezione automatica della località
Nei seguenti casi, la località in cui deve essere eseguita una query viene determinata automaticamente e non può essere modificata:
- Le query del linguaggio di modifica dei dati (istruzioni
INSERT,UPDATE,DELETE) vengono sempre eseguite in una posizione della tabella di destinazione. - Le query del Data Definition Language, come l'istruzione
CREATE TABLE AS SELECT, vengono sempre eseguite nella posizione in cui viene creata o modificata una risorsa. - Le query con una tabella di destinazione specificata vengono sempre eseguite nella località in cui si trova la tabella di destinazione.
Scegli località
In generale, decidi dove vengono eseguite le query globali. Per prendere questa decisione, considera quanto segue:
Le query globali copiano temporaneamente i dati da una posizione all'altra. Se la tua organizzazione ha requisiti di residenza dei dati e non vuoi che i dati della località A lascino la località A, imposta la località della query su A.
Per ridurre al minimo la quantità di dati trasferiti tra le località e ridurre il costo della query, esegui la query nella regione in cui è archiviata la maggior parte dei dati sottoposti a query.
Immagina di avere un negozio online e di tenere un elenco dei tuoi prodotti nella località
us-central1, ma le transazioni nella regione us-south1. Se ci sono più transazioni
che prodotti nel tuo catalogo, devi eseguire la query nella regione us-south1.
Informazioni sulle query globali
Per eseguire query globali in modo efficiente ed economico, è importante comprendere il meccanismo alla base della loro esecuzione.
Per utilizzare i dati che si trovano in posizioni diverse, è necessario replicarli in una sola posizione. Di seguito è riportata un'astrazione del flusso di lavoro della query globale eseguita da BigQuery:
- Determina dove deve essere eseguita la query (dalla dichiarazione dell'utente o automaticamente). Questa posizione è chiamata posizione principale, mentre tutte le altre posizioni a cui fa riferimento la query sono remote.
- Esegui una sottoquery in ogni regione remota per raccogliere i dati necessari per completare la query nella regione primaria.
- Copia questi dati dalle località remote nella località principale.
- Salva i dati in tabelle temporanee nella posizione principale per 8 ore.
- Esegui una query finale con tutti i dati raccolti nella posizione principale.
- Restituisce i risultati della query.
BigQuery tenta di ridurre al minimo la quantità di dati trasferiti tra le regioni. Considera l'esempio seguente:
SET @@location = 'EU';
SELECT
t1.col1, t2.col2
FROM
eu_dataset.table1 t1
JOIN us_dataset.table2 t2 using col3
WHERE
t2.col4 = 'ABC'
BigQuery non deve replicare l'intera tabella t2 dagli Stati Uniti all'UE.
È sufficiente trasferire solo le colonne richieste (col2 e col3) e solo le righe che corrispondono alla condizione WHERE (t2.col4 = 'ABC'). Tuttavia, questi meccanismi, noti come pushdown, dipendono dalla struttura della query e a volte la quantità di dati trasferiti potrebbe essere elevata.
Ti consigliamo di testare le query globali su un piccolo sottoinsieme di dati
e di verificare che i dati vengano trasferiti solo quando necessario.
Osservabilità
Per visualizzare il testo della query inviata alla regione remota, controlla la cronologia dei job. Il job remoto
ha lo stesso ID job della query originale con il suffisso aggiuntivo _xregion.
Disattivare le query globali
Per disattivare le query globali per il tuo progetto o la tua organizzazione, utilizza
ALTER PROJECT SET OPTIONS statement
o ALTER ORGANIZATION SET OPTIONS statement
per modificare la configurazione predefinita.
- Per disattivare le query globali in una regione, imposta l'argomento
enable_global_queries_executionsufalseoNULLin quella regione. - Per impedire alle query globali di copiare i dati da una regione, imposta l'argomento
enable_global_queries_data_accesssufalseoNULLin quella regione.
L'esempio seguente mostra come disattivare le query globali a livello di progetto:
ALTER PROJECTPROJECT_IDSET OPTIONS ( `region-REGION.enable_global_queries_execution` = false, `region-REGION.enable_global_queries_data_access` = false );
Sostituisci quanto segue:
PROJECT_ID: il nome del progetto da modificareREGION: il nome della regione in cui disattivare le query globali
Potrebbero essere necessari diversi minuti prima che la modifica diventi effettiva.
Prezzi
Il costo di una query globale è costituito dai seguenti componenti:
- Il costo di calcolo di ogni sottoquery nelle località remote, in base al tuo modello di prezzi in queste località
- Il costo di calcolo della query finale nella regione in cui viene eseguita, in base al tuo modello di determinazione del prezzo in quella regione
- Il costo della copia dei dati tra località diverse, in base ai prezzi della replica dei dati
- Il costo di archiviazione dei dati copiati dalle regioni remote nella regione principale (per 8 ore), in base ai prezzi di archiviazione
Quote
Per informazioni sulle quote relative alle query globali, consulta Job di query.
Limitazioni
- I dettagli di esecuzione e il grafico di esecuzione di una query non mostrano il numero di byte elaborati e trasferiti dalle località remote. Queste informazioni vengono visualizzate nei job di copia che puoi trovare nella cronologia dei job. L'ID job di un job di copia creato da una query globale ha l'ID job del job di query come prefisso.
- Le query globali non sono supportate in modalità sandbox
- Le query globali comportano una latenza maggiore rispetto alle query a singola regione a causa del tempo necessario per trasferire i dati tra le regioni.
- Le query globali non utilizzano alcuna cache per evitare il trasferimento di dati tra regioni.
- Non puoi eseguire query sulle pseudocolonne, ad esempio
_PARTITIONTIME, con le query globali. - Non puoi eseguire query sulle colonne utilizzando nomi di colonne flessibili con query globali.
- Quando fai riferimento alle colonne di una tabella BigLake in una clausola
WHERE, non puoi utilizzare i valori letteraliRANGEoINTERVAL. - Le visualizzazioni autorizzate e le routine autorizzate globali non sono supportate (quando una visualizzazione o una routine in una posizione è autorizzata ad accedere al set di dati in un'altra posizione).
- Le viste materializzate sulle query globali non sono supportate.
- Se la query globale fa riferimento a colonne
STRUCT, non vengono applicati pushdown a nessuna sottoquery remota. Per ottimizzare il rendimento, valuta la possibilità di creare una vista nella regione remota che filtri le colonneSTRUCTe restituisca solo i campi necessari come singole colonne. - Le query globali non vengono eseguite in modo atomico. Nei casi in cui la replica dei dati va a buon fine, ma la query complessiva non riesce, ti viene comunque addebitato il costo della replica dei dati.
- Le tabelle temporanee create in regioni remote nell'ambito dell'esecuzione di query globali vengono criptate solo utilizzando chiavi di crittografia gestite dal cliente (CMEK) se una chiave CMEK configurata per criptare i risultati della query globale (a livello di tabella, set di dati o progetto) è globale. Per assicurarti che le tabelle temporanee remote siano sempre protette utilizzando CMEK, imposta una chiave KMS predefinita per il progetto che esegue query globali nella regione remota.
- Le query globali non sono supportate in Assured Workloads.
- In una query globale puoi eseguire query su un massimo di 10 tabelle per regione.