Query di memorizzazione nella cache

Looker riduce il carico sul tuo database e migliora le prestazioni attraverso l'utilizzo dei risultati delle query SQL precedenti memorizzati nella cache quando sono disponibili e quando questa funzione è consentita dal tuo criterio di memorizzazione nella cache. Questa pagina descrive il criterio di memorizzazione nella cache predefinito di Looker e le opzioni disponibili per modificare la durata dei risultati memorizzati nella cache dell'istanza di Looker.

In che modo Looker utilizza le query memorizzate nella cache

Per le query SQL, il meccanismo di memorizzazione nella cache di Looker funziona come segue:

  1. Quando una query SQL viene eseguita da Explore, Look o dashboard, Looker controlla la cache per vedere se ci sono già risultati memorizzati nella cache per la query. I risultati memorizzati nella cache verranno utilizzati solo se tutti gli aspetti della query sono gli stessi, inclusi campi, filtri, parametri e limiti di righe.

  2. Se vengono trovati risultati memorizzati nella cache, Looker controlla il criterio di memorizzazione nella cache definito nel modello LookML per determinare se i risultati memorizzati nella cache sono scaduti. Se i risultati memorizzati nella cache non sono scaduti, Looker utilizza i risultati memorizzati nella cache per la query.

  3. Se non vengono trovati risultati memorizzati nella cache per la query o se i risultati memorizzati nella cache sono scaduti, Looker esegue la query sul database. I nuovi risultati della query verranno quindi memorizzati nella cache.

I commenti del contesto non influiscono sulla memorizzazione nella cache. I commenti non vengono archiviati come parte della query allo scopo di trovare corrispondenze nella cache.

Il criterio di conservazione della cache predefinito è di un'ora. La sezione successiva, Modificare i criteri di conservazione della cache, illustra come ridurre o allungare questo periodo di tempo e descrivere le opzioni per la sincronizzazione dei criteri di conservazione della cache con la procedura ETL (estrazione, trasformazione e caricamento) del database.

Modifica dei criteri di conservazione della cache

Puoi specificare i criteri di conservazione della cache a livello di Esplora LookML e a livello di modello LookML.

Il meccanismo consigliato per la memorizzazione nella cache è utilizzare un parametro datagroup a livello di modello. I gruppi di dati consentono di sincronizzare il criterio di conservazione della cache di un modello con la pianificazione ETL del tuo database utilizzando il parametro sql_trigger e impostando un intervallo di scadenza della cache con il parametro max_cache_age. Per ulteriori informazioni, consulta la sezione Memorizzazione nella cache delle query e ricreazione delle PDT con i gruppi di dati.

Per un approccio più semplice, puoi invece utilizzare il parametro persist_for a livello di modello o a livello di esplorazione. In questo modo, il parametro persist_for consente di impostare un intervallo di scadenza della cache che sostituisce l'intervallo predefinito di un'ora. Tuttavia, l'uso di persist_for è meno efficace dell'uso di gruppi di dati per diversi motivi, come descritto nella sezione Memorizzazione nella cache delle query con persiste_for.

Se un'esplorazione o un modello ha un gruppo di dati o persist_for definito, il criterio di memorizzazione nella cache viene modificato come segue:

  • Prima che l'intervallo persist_for o l'intervallo max_cache_age del gruppo di dati scada: Se la query viene eseguita di nuovo, Looker estrae i dati dalla cache.
  • Alla scadenza dell'intervallo persist_for o dell'intervallo max_cache_age del gruppo di dati: Looker elimina i dati dalla cache.
  • Dopo la scadenza dell'intervallo persist_for o dell'intervallo max_cache_age del gruppo di dati: se la query viene eseguita di nuovo, Looker estrae i dati direttamente dal database e reimposta l'intervallo persist_for o max_cache_age.

Un punto chiave qui è che i dati vengono eliminati dalla cache allo scadere dell'intervallo persist_for o max_cache_age.

Se la cache raggiunge il limite di spazio di archiviazione, i dati vengono espulsi in base a un algoritmo LRU (Recentemente utilizzato) senza garanzia che i dati con intervalli di persist_for o max_cache_age scaduti vengano eliminati contemporaneamente.

Ridurre al minimo il tempo trascorso dai dati nella cache

Looker scriverà sempre i risultati della query nella cache. Anche se gli intervalli di persist_for e max_cache_age sono impostati su zero, i dati memorizzati nella cache potrebbero comunque essere memorizzati per un massimo di 10 minuti. Tutti i dati dei clienti archiviati nella cache del disco sono criptati con AES (Advanced Encryption Standard).

Per ridurre al minimo il tempo di archiviazione dei dati nella cache:

  • Per qualsiasi parametro persist_for (per un modello o un'esplorazione) o il parametro max_cache_age (per un gruppo di dati), imposta il valore su 0 minutes. Looker elimina la cache alla scadenza dell'intervallo persist_for o quando i dati raggiungono l'intervallo max_cache_age specificato nel relativo datagroup. Non è necessario impostare il parametro persist_for delle PDT su 0 minutes per ridurre al minimo la quantità di dati archiviati nella cache. Le PDT vengono scritte nel database stesso e non nella cache.
  • Imposta il parametro suggest_persist_for su un intervallo piccolo. Il valore suggest_persist_for specifica per quanto tempo Looker deve conservare i suggerimenti per i filtri nella cache. I suggerimenti per i filtri sono basati su una query dei valori del campo che viene filtrato. Questi risultati delle query rimangono nella cache, in modo che Looker possa fornire rapidamente suggerimenti come tipi di utenti nel campo di testo del filtro. L'impostazione predefinita prevede di memorizzare nella cache i suggerimenti per i filtri per sei ore. Per ridurre al minimo la quantità di tempo in cui i tuoi dati sono nella cache, imposta il valore suggest_persist_for su un valore inferiore, ad esempio 5 minutes.

Controllare se una query è stata restituita dalla cache

In una finestra di esplorazione, puoi determinare se una query è stata restituita dalla cache esaminando l'angolo in alto a destra dopo aver eseguito una query.

Quando una query viene restituita dalla cache, viene visualizzato "da cache". In caso contrario, viene visualizzato il tempo impiegato per restituire la query.

Forza la generazione di nuovi risultati dal database

In una finestra di esplorazione puoi forzare il recupero di nuovi risultati dal database. Dopo aver eseguito una query (incluse le query dei risultati uniti), seleziona l'opzione Svuota cache e aggiorna dal menu a discesa Esplora azioni, che si trova nella parte in alto a destra dello schermo.

Memorizzazione nella cache delle query e della ricostruzione delle PDT con i gruppi di dati

Utilizza i gruppi di dati per coordinare la pianificazione ETL (estrazione, trasformazione e caricamento) del tuo database con il criterio di memorizzazione nella cache e la pianificazione di ricostruzione di PDT di Looker.

Puoi utilizzare un gruppo di dati per specificare il trigger di ricostruzione delle PDT in base alla data in cui vengono aggiunti nuovi dati al database. Successivamente, puoi applicare lo stesso gruppo di dati a Explore o al tuo modello in modo che anche i risultati memorizzati nella cache scadano quando le PDT vengono ricreate.

In alternativa, puoi utilizzare un gruppo di dati per disaccoppiare l'attivatore di ricostruzione PDT dall'età massima della cache. Questa opzione può essere utile se hai un'esplorazione basata su dati che vengono aggiornati molto spesso e che sono stati uniti a una PDT ricreata con minore frequenza. In questo caso, potresti voler reimpostare la cache delle query con maggiore frequenza rispetto alla ricostruzione della PDT.

Definizione di un gruppo di dati

Definisci un gruppo di dati con il parametro datagroup, in un file modello o in un proprio file LookML. Puoi definire più gruppi di dati se vuoi criteri diversi per la memorizzazione nella cache e la ricostruzione delle PDT in diverse esplorazioni e/o PDT nel tuo progetto.

Il parametro datagroup può avere i seguenti sottoparametri:

  • label: specifica un'etichetta facoltativa per il gruppo di dati.
  • description: specifica una descrizione facoltativa del gruppo di dati che può essere utilizzata per spiegare lo scopo e il meccanismo del gruppo di dati.
  • max_cache_age: specifica una stringa che definisce un periodo di tempo. Quando l'età della cache di una query supera il periodo di tempo, Looker invalida la cache. La volta successiva che la query viene eseguita, Looker la invia al database per ottenere nuovi risultati.
  • sql_trigger: specifica una query SQL che restituisce una riga con una colonna. Se il valore restituito dalla query è diverso dai risultati precedenti della query, lo stato del gruppo di dati risulta attivato.
  • interval_trigger: consente di specificare una pianificazione temporale per l'attivazione del gruppo di dati, ad esempio "24 hours".

Per ulteriori informazioni su questi parametri, consulta la pagina della documentazione relativa ai datagroup.

Un gruppo di dati deve contenere almeno il parametro max_cache_age, il parametro sql_trigger o interval_trigger.

Di seguito è riportato un esempio di gruppo di dati con una risorsa sql_trigger configurata per la ricostruzione della PDT ogni giorno. Inoltre, il max_cache_age viene impostato per svuotare la cache delle query ogni due ore, nel caso in cui eventuali esplorazioni uniscano le PDT ad altri dati che vengono aggiornati più di una volta al giorno.

datagroup: customers_datagroup {
  sql_trigger: SELECT DATE(NOW());;
  max_cache_age: "2 hours"
}

Una volta definito il gruppo di dati, puoi assegnarlo a esplorazioni e PDT:

Utilizzo di un gruppo di dati per specificare un trigger di ricostruzione per le PDT

Per definire un attivatore di ricostruzione PDT utilizzando i gruppi di dati, crea un parametro datagroup con il parametro secondario sql_trigger o interval_trigger. Quindi, assegna il gruppo di dati alle singole PDT utilizzando il parametro secondario datagroup_trigger nella definizione derived_table della PDT. Se utilizzi datagroup_trigger per la PDT, non devi specificare nessun'altra strategia di persistenza per la tabella derivata. Se specifichi più strategie di persistenza per una PDT, riceverai un avviso nell'IDE di Looker e verrà utilizzato solo datagroup_trigger.

Di seguito è riportato un esempio di definizione di PDT che utilizza il gruppo di dati customers_datagroup. Questa definizione aggiunge anche diversi indici, sia su customer_id sia su first_order_date. Per ulteriori informazioni sulla definizione delle PDT, consulta la pagina della documentazione Tabelle derivate in Looker.

view: customer_order_facts {
  derived_table: {
    sql: ... ;;
    datagroup_trigger: customers_datagroup
    indexes: ["customer_id", "first_order_date"]
  }
}

Se sono presenti PDT a cascata, che dipendono da altre PDT, presta attenzione a non specificare criteri di memorizzazione nella cache del gruppo di dati incompatibili.

Per le connessioni con attributi utente che specificano i parametri di connessione, devi creare una connessione separata con i campi di override PDT per eseguire una delle seguenti operazioni:
Utilizza le PDT nel tuo modello
Utilizza un gruppo di dati per definire un attivatore di ricostruzione PDT
Senza le sostituzioni PDT, puoi comunque utilizzare un gruppo di dati con max_cache_age per definire i criteri di memorizzazione nella cache per le esplorazioni.

Per ulteriori informazioni sul funzionamento dei gruppi di dati con le PDT, consulta la pagina della documentazione sulle tabelle derivate in Looker.

Utilizzo di un gruppo di dati per specificare la reimpostazione della cache delle query per le esplorazioni

Quando viene attivato un gruppo di dati, il rigeneratore Looker ricostruisce le PDT che utilizzano tale gruppo di dati come strategia di persistenza. Una volta ricreate le PDT del gruppo di dati, Looker svuota la cache per le esplorazioni che utilizzano le PDT ricostruite del gruppo di dati. Puoi aggiungere il parametro max_cache_age alla definizione del gruppo di dati se vuoi personalizzare la pianificazione della reimpostazione della cache delle query per il gruppo di dati. Il parametro max_cache_age consente di svuotare la cache delle query in base a una pianificazione specificata, oltre al ripristino automatico della cache delle query eseguito da Looker quando le PDT del gruppo di dati vengono ricreate.

Per definire un criterio di memorizzazione nella cache delle query con i gruppi di dati, crea un parametro datagroup con il parametro secondario max_cache_age.

Per specificare un gruppo di dati da utilizzare per le reimpostazioni della cache delle query nelle esplorazioni, utilizza il parametro persist_with:

Gli esempi riportati di seguito mostrano un gruppo di dati denominato orders_datagroup, definito in un file del modello. Il gruppo di dati ha un parametro sql_trigger, che specifica che la query select max(id) from my_tablename verrà utilizzata per rilevare quando si è verificato un ETL. Anche se l'ETL non si verifica per un po' di tempo, il max_cache_age del gruppo di dati specifica che i dati memorizzati nella cache verranno utilizzati solo per un massimo di 24 ore.

Il parametro persist_with del modello punta al criterio di memorizzazione nella cache di orders_datagroup, il che significa che questo sarà il criterio di memorizzazione nella cache predefinito per tutte le esplorazioni nel modello. Tuttavia, non vogliamo utilizzare il criterio di memorizzazione nella cache predefinito del modello per le esplorazioni customer_facts e customer_background, quindi possiamo aggiungere il parametro persist_with per specificare un criterio di memorizzazione nella cache diverso per queste due esplorazioni. Le esplorazioni orders e orders_facts non hanno un parametro persist_with, quindi utilizzeranno il criterio di memorizzazione nella cache predefinito del modello: orders_datagroup.

datagroup: orders_datagroup {
  sql_trigger: SELECT max(id) FROM my_tablename ;;
  max_cache_age: "24 hours"
}

datagroup: customers_datagroup {
  sql_trigger: SELECT max(id) FROM my_other_tablename ;;
}

persist_with: orders_datagroup

explore: orders { ... }

explore: order_facts { ... }

explore: customer_facts {
  persist_with: customers_datagroup
  ...
}

explore: customer_background {
  persist_with: customers_datagroup
  ...
}

Se persist_with e persist_for sono specificati, riceverai un avviso di convalida e verrà utilizzato persist_with.

Utilizzo di un gruppo di dati per attivare le consegne programmate

I gruppi di dati possono essere utilizzati anche per attivare una distribuzione di una dashboard o di un look. Con questa opzione, Looker invierà i tuoi dati una volta completato il gruppo di dati, in modo che i contenuti pianificati siano aggiornati.

Utilizzare il riquadro Amministrazione per i gruppi di dati

Se hai il ruolo di amministratore di Looker, puoi utilizzare la pagina Gruppi di dati del riquadro Amministrazione per visualizzare i gruppi di dati esistenti. Puoi visualizzare la connessione, il modello e lo stato corrente di ogni gruppo di dati e, se specificato in LookML, un'etichetta e una descrizione per ciascun gruppo di dati. Puoi anche reimpostare la cache per un gruppo di dati, attivarlo o accedere al LookML del gruppo di dati.

Memorizzazione nella cache delle query con persist_for

Utilizza il parametro persist_for a livello di modello o Esplora per modificare l'intervallo predefinito di conservazione della cache di Looker di un'ora. Puoi impostare intervalli inferiori a 0 minutes e intervalli fino a 8760 hours (1 anno) o superiori.

La definizione dei parametri persist_for può essere più semplice e veloce, ma meno efficace rispetto alla definizione di gruppi di dati. I gruppi di dati sono consigliati sopra persist_for per i seguenti motivi:

  • I gruppi di dati possono essere sincronizzati con il processo ETL del tuo database.
  • Puoi riutilizzare i gruppi di dati in diversi modelli ed esplorazioni. Ciò significa che puoi aggiornare il max_cache_age di un gruppo di dati e il criterio di memorizzazione nella cache in ogni posizione in cui viene utilizzato il gruppo di dati.
  • Puoi svuotare tutta la cache associata a un gruppo di dati dalla pagina Gruppi di dati.