Utilizzo dei risultati delle query memorizzati nella cache
BigQuery scrive tutti i risultati delle query in una tabella. La tabella viene identificata esplicitamente dall'utente (una tabella di destinazione) oppure è una tabella di risultati temporanea memorizzata nella cache. Se esegui di nuovo la stessa query, BigQuery restituisce i risultati dalla tabella memorizzata nella cache, se esiste. Le tabelle di risultati temporanee memorizzate nella cache vengono gestite per utente e per progetto. A seconda della versione, potresti avere accesso ai risultati memorizzati nella cache di altri utenti che eseguono query nello stesso progetto. Non sono previsti costi di archiviazione per le tabelle dei risultati delle query memorizzate nella cache, ma se scrivi i risultati delle query in una tabella permanente, ti viene addebitato il costo per l'archiviazione dei dati.
Tutti i risultati delle query, incluse le query interattive e collettive, vengono memorizzati nella cache in tabelle temporanee per circa 24 ore, con alcune eccezioni.
Limitazioni
L'utilizzo della cache delle query è soggetto alle seguenti limitazioni:
- Quando esegui una query duplicata, BigQuery tenta di riutilizzare i risultati memorizzati nella cache. Per recuperare i dati dalla cache, il testo della query duplicata deve essere uguale alla query originale.
- Affinché i risultati delle query rimangano in una tabella di risultati memorizzata nella cache, il set di risultati deve essere inferiore alla dimensione massima della risposta. Per saperne di più sulla gestione di set di risultati di grandi dimensioni, consulta Restituzione di risultati di query di grandi dimensioni.
- Non puoi scegliere come target le tabelle dei risultati memorizzati nella cache con le istruzioni DML.
- Sebbene la semantica attuale lo consenta, l'utilizzo dei risultati memorizzati nella cache come input per i job dipendenti è sconsigliato. Ad esempio, non devi inviare job di query che recuperano i risultati dalla tabella della cache. Scrivi invece i risultati in una tabella di destinazione denominata. Per semplificare la pulizia, le funzionalità come la proprietà
defaultTableExpirationMsa livello di set di dati possono far scadere automaticamente i dati dopo una determinata durata.
Prezzi e quote
I risultati delle query memorizzati nella cache vengono archiviati come tabelle temporanee. Non ti viene addebitato alcun costo per l'archiviazione dei risultati delle query memorizzati nella cache nelle tabelle temporanee. Quando i risultati delle query vengono recuperati da una tabella di risultati memorizzata nella cache, la proprietà delle statistiche dei job statistics.query.cacheHit restituisce true e la query non viene addebitata. Sebbene non ti venga addebitato alcun costo per le query che utilizzano i risultati memorizzati nella cache, le
query sono soggette alle policy relative alle quote di BigQuery
.
Oltre a ridurre i costi, le query che utilizzano i risultati memorizzati nella cache sono notevolmente più veloci perché BigQuery non deve calcolare il set di risultati.
Eccezioni alla memorizzazione nella cache delle query
I risultati delle query non vengono memorizzati nella cache:
- Quando viene specificata una tabella di destinazione nella configurazione del job, la Google Cloud console, lo strumento a riga di comando bq o nell'API.
- Se una delle tabelle o delle viste logiche a cui viene fatto riferimento è stata modificata da quando i risultati sono stati memorizzati nella cache.
- Quando una delle tabelle a cui fa riferimento la query ha ricevuto di recente inserimenti di flussi (la tabella contiene dati nell'archiviazione ottimizzata per la scrittura), anche se non sono arrivate nuove righe.
- Se la query utilizza funzioni non deterministiche; ad esempio, le funzioni di data e ora come
CURRENT_TIMESTAMP()eCURRENT_DATEe altre funzioni comeSESSION_USER()restituiscono valori diversi a seconda di quando viene eseguita una query. - Se esegui query su più tabelle utilizzando un carattere jolly.
- Se i risultati memorizzati nella cache sono scaduti; la durata tipica della cache è di 24 ore, ma i risultati memorizzati nella cache sono di tipo best-effort e potrebbero essere invalidati prima.
- Se la query viene eseguita su un origine dati esterna. diversa da Cloud Storage. (Le query GoogleSQL su Cloud Storage sono supportate dai risultati delle query memorizzati nella cache.)
- Se la query viene eseguita su una tabella protetta da sicurezza a livello di riga, i risultati non vengono memorizzati nella cache.
- Se la query viene eseguita su una tabella protetta dalla sicurezza a livello di colonna, incluso il mascheramento dei dati, i risultati potrebbero non essere memorizzati nella cache.
- Se il testo della query è stato modificato in qualsiasi modo, inclusi spazi vuoti o commenti modificati.
Modalità di archiviazione dei risultati memorizzati nella cache
Quando esegui una query, viene creata una tabella di risultati temporanea memorizzata nella cache in un tipo speciale
di set di dati nascosto
denominato set di dati anonimo.
A differenza dei set di dati normali che ereditano le autorizzazioni dal modello di gerarchia delle risorse IAM (autorizzazioni di progetto e organizzazione), l'accesso ai set di dati anonimi è limitato al proprietario. Il proprietario di un set di dati anonimo è l'utente che ha eseguito la query che ha prodotto il risultato memorizzato nella cache. Inoltre, viene controllata l'autorizzazione bigquery.jobs.create sul progetto per verificare che l'utente abbia accesso al progetto.
BigQuery non supporta la condivisione di set di dati anonimi. Se intendi condividere i risultati delle query, non utilizzare i risultati memorizzati nella cache in un set di dati anonimo. Scrivi invece i risultati in una tabella di destinazione denominata.
Sebbene l'utente che esegue la query abbia accesso completo al set di dati e alla tabella dei risultati memorizzati nella cache, l'utilizzo di questi elementi come input per i job dipendenti è sconsigliato.
I nomi dei set di dati anonimi iniziano con un trattino basso. In questo modo vengono nascosti dall'elenco dei set di dati nella Google Cloud console. Puoi elencare i set di dati anonimi e controllare i controlli di accesso ai set di dati anonimi utilizzando lo strumento a riga di comando bq o l'API.
Per saperne di più su come elencare e ottenere informazioni sui set di dati, inclusi i set di dati anonimi, consulta Elenco dei set di dati.
Memorizzazione nella cache tra utenti
Se disponi delle autorizzazioni necessarie per eseguire una query i cui risultati sono memorizzati nella cache nel tuo progetto per un altro utente, BigQuery restituisce i risultati dalla cache. Il risultato memorizzato nella cache viene copiato nel tuo set di dati anonimo personale e rimane lì per 24 ore dall'esecuzione della query.
La memorizzazione nella cache tra utenti è disponibile se utilizzi la versione Enterprise o Enterprise Plus edition. Gli stessi limiti ed eccezioni per la memorizzazione nella cache per un singolo utente si applicano a memorizzazione nella cache tra utenti.
Disattivazione del recupero dei risultati memorizzati nella cache
L'opzione Utilizza risultati memorizzati nella cache riutilizza i risultati di un'esecuzione precedente della stessa query, a meno che le tabelle su cui viene eseguita la query non siano state modificate. L'utilizzo dei risultati memorizzati nella cache è utile solo per le query ripetute. Per le nuove query, l'opzione Utilizza risultati memorizzati nella cache non ha alcun effetto, anche se è attivata per impostazione predefinita.
Quando ripeti una query con l'opzione Utilizza risultati memorizzati nella cache disattivata, il risultato memorizzato nella cache esistente viene sovrascritto. In questo modo, BigQuery deve calcolare il risultato della query e ti viene addebitato il costo della query. Questa opzione è particolarmente utile negli scenari di benchmarking.
Se vuoi disattivare il recupero dei risultati memorizzati nella cache e forzare la valutazione in tempo reale di un job di query, puoi impostare la proprietà configuration.query.useQueryCache del job di query su false.
Per disattivare l'opzione Utilizza risultati memorizzati nella cache:
Console
Apri la Google Cloud console.
Vai alla pagina BigQueryFai clic su Crea nuova query.
Inserisci una query SQL valida nell'area di testo Editor query.
Fai clic su Altro e seleziona Impostazioni query.
In Preferenza cache, deseleziona Utilizza risultati memorizzati nella cache.
bq
Utilizza il flag nouse_cache per sovrascrivere la cache delle query. L'esempio seguente impone a BigQuery di elaborare la query senza utilizzare i risultati memorizzati nella cache esistenti:
bq query \
--nouse_cache \
--batch \
'SELECT
name,
count
FROM
`my-project`.mydataset.names_2013
WHERE
gender = "M"
ORDER BY
count DESC
LIMIT
6'
API
Per elaborare una query senza utilizzare i risultati memorizzati nella cache esistenti, imposta la proprietà useQueryCache su false nella configurazione del job query.
Vai
Prima di provare questo esempio, segui le istruzioni di configurazione di Go nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'Go API BigQuery.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Java
Per elaborare una query senza utilizzare i risultati memorizzati nella cache esistenti,
imposta la cache delle query
su false quando crei un
QueryJobConfiguration.
Prima di provare questo esempio, segui le istruzioni di configurazione Java nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Java BigQuery.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione Node.js nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'Node.js API BigQuery.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
PHP
Prima di provare questo esempio, segui le istruzioni di configurazione di PHP nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell' API PHP BigQuery.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API PythonBigQuery.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Garantire l'utilizzo della cache
Se utilizzi il jobs.insert metodo
per eseguire una query, puoi forzare l'esito negativo di un job di query a meno che non sia possibile utilizzare i risultati memorizzati nella cache
impostando la proprietà createDisposition della configurazione del job query
su CREATE_NEVER.
Se il risultato della query non esiste nella cache, viene restituito un errore NOT_FOUND.
bq
Utilizza il flag --require_cache per richiedere i risultati dalla cache delle query. L'esempio seguente impone a BigQuery di elaborare la query se i risultati esistono nella cache:
bq query \
--require_cache \
--batch \
'SELECT
name,
count
FROM
`my-project`.mydataset.names_2013
WHERE
gender = "M"
ORDER BY
count DESC
LIMIT
6'
API
Per elaborare una query con i risultati memorizzati nella cache esistenti, imposta la
createDisposition
proprietà
su CREATE_NEVER nella configurazione del job query.
Verifica dell'utilizzo della cache
Utilizza uno dei seguenti metodi per determinare se BigQuery ha restituito un risultato utilizzando la cache:
- Utilizza la Google Cloud console. Vai a Risultati query e fai clic su Informazioni job. Byte elaborati viene visualizzato 0 B (risultati memorizzati nella cache).
- Utilizza l'API BigQuery.
La proprietà
cacheHitnel risultato della query è impostata sutrue.
Impatto della sicurezza a livello di colonna
Per impostazione predefinita, BigQuery memorizza nella cache i risultati delle query per 24 ore, con le eccezioni indicate in precedenza. Le query su una tabella protetta dalla sicurezza a livello di colonna potrebbero non essere memorizzate nella cache. Se BigQuery memorizza nella cache il risultato, si applica la durata della cache di 24 ore.
Una modifica, ad esempio la rimozione di un gruppo o di un utente dal ruolo Lettore granulare di Data Catalog utilizzato per un tag di criteri, non invalida la cache di 24 ore. Una modifica al gruppo di controllo dell'accesso Lettore granulare di Data Catalog viene propagata immediatamente, ma la modifica non invalida la cache.
L'impatto è che se un utente ha eseguito una query, i risultati della query rimangono visibili all'utente sullo schermo. L'utente può anche recuperare questi risultati dalla cache anche se ha perso l'accesso ai dati nelle ultime 24 ore.
Durante le 24 ore successive alla rimozione di un utente dal ruolo Lettore granulare di Data Catalog per un tag di criteri, l'utente può accedere ai dati memorizzati nella cache solo per i dati che in precedenza aveva l'autorizzazione a visualizzare. Se vengono aggiunte righe alla tabella, l'utente non può visualizzare le righe aggiunte, anche se i risultati sono memorizzati nella cache.