Memorizzazione nella cache delle query

Looker riduce il carico sul tuo database e migliora le prestazioni utilizzando i risultati memorizzati nella cache delle query SQL precedenti, se disponibili e quando questa funzione è consentita dal criterio di memorizzazione nella cache. Questa pagina descrive il criterio di memorizzazione nella cache predefinito di Looker, insieme alle opzioni disponibili per modificare la durata dei risultati memorizzati nella cache sull'istanza di Looker.

In che modo Looker utilizza le query memorizzate nella cache

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

  1. Quando una query SQL viene eseguita da un'esplorazione, un Look o una dashboard, Looker controlla la cache per verificare se esistono 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 eseguirà la query sul database. I risultati della nuova query verranno quindi memorizzati nella cache.

Il criterio di conservazione della cache predefinito è di un'ora. La sezione successiva, Modifica dei criteri di conservazione della cache, illustra come ridurre o allungare questo periodo di tempo, oltre a descrivere le opzioni per sincronizzare i criteri di conservazione della cache con il processo 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 esplorazione LookML e a livello di modello LookML.

Il meccanismo di memorizzazione nella cache consigliato consiste nell'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 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 Memorizzare nella cache le query e ricreare le PDT con i gruppi di dati.

Per un approccio più semplice, puoi utilizzare il parametro persist_for a livello di modello o a livello di esplorazione. Se utilizzi il parametro persist_for in questo modo, puoi impostare un intervallo di scadenza della cache che sostituisce l'intervallo predefinito di un'ora. Tuttavia, l'utilizzo di persist_for è meno affidabile rispetto all'uso dei gruppi di dati per vari motivi, come discusso nella sezione Memorizzazione nella cache delle query con persistenti_for.

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

  • Prima della 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 dalla cache.
  • Nel momento in cui scade l'intervallo persist_for o 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 fondamentale in questo caso è che i dati vengono eliminati dalla cache alla scadenza 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 (Least Recent Use), senza alcuna garanzia che i dati con intervalli persist_for o max_cache_age scaduti vengano eliminati tutti contemporaneamente.

Ridurre al minimo il tempo di permanenza dei dati nella cache

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

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

  • Per qualsiasi parametro persist_for (per un modello o un'esplorazione) o un 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 gruppo di dati. 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 ridotto. Il valore suggest_persist_for specifica per quanto tempo Looker deve conservare i suggerimenti per il filtro nella cache. I suggerimenti per i filtri si basano su una query dei valori del campo filtrato. Questi risultati della query vengono conservati nella cache in modo che Looker possa fornire rapidamente suggerimenti mentre l'utente digita nel campo di testo del filtro. L'impostazione predefinita prevede la memorizzazione nella cache dei suggerimenti per i filtri per 6 ore. Per ridurre al minimo il tempo di permanenza dei dati nella cache, imposta il valore suggest_persist_for su un valore inferiore, ad esempio 5 minutes.

Verificare se una query è stata restituita dalla cache

In una finestra Esplora, è possibile determinare se una query è stata restituita dalla cache osservando le informazioni visualizzate accanto al pulsante Esegui dopo l'esecuzione di una query.

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

Forzare la generazione di nuovi risultati dal database

In una finestra Esplora, puoi forzare il recupero di nuovi risultati dal database. Dopo aver eseguito una query (incluse le query con risultati uniti), seleziona l'opzione Svuota cache e aggiorna dal menu a forma di ingranaggio Esplora azioni.

Memorizzare le query nella cache e ricreare le PDT con i gruppi di dati

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

Puoi utilizzare un gruppo di dati per specificare il trigger di rigenerazione per le PDT in base a quando vengono aggiunti nuovi dati al database. Quindi puoi applicare lo stesso gruppo di dati all'esplorazione o al modello in modo che i risultati memorizzati nella cache scadano anche alla ricreazione delle PDT.

In alternativa, puoi utilizzare un gruppo di dati per disaccoppiare il trigger di ricreazione della PDT dall'età massima della cache. Questo può essere utile se hai un'esplorazione basata su dati che si aggiornano molto spesso e si uniscono a una PDT ricostruita meno di frequente. In questo caso, potresti volere che la cache delle query venga reimpostata più spesso rispetto a quando la PDT viene ricreata.

Definizione di un gruppo di dati

Definisci un gruppo di dati con il parametro datagroup in un file del modello o nel proprio file LookML. Puoi definire più gruppi di dati se vuoi diversi criteri di memorizzazione nella cache e di rigenerazione delle PDT per 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 per il gruppo di dati che può essere utilizzata per spiegare lo scopo e il meccanismo del gruppo.
  • 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 rende la cache non valida. 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, il gruppo di dati passa allo stato attivato.
  • interval_trigger: specifica una pianificazione temporale per l'attivazione del gruppo di dati, ad esempio "24 hours".

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

Ecco un esempio di un gruppo di dati in cui è configurato sql_trigger per ricreare la PDT ogni giorno. Inoltre, max_cache_age è 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 ricreazione per le PDT

Per definire un trigger per la ricreazione di PDT utilizzando i gruppi di dati, crea un parametro datagroup con il sottoparametro sql_trigger o interval_trigger. Quindi assegna il gruppo di dati a singole PDT utilizzando il sottoparametro datagroup_trigger nella definizione di derived_table della PDT. Se utilizzi datagroup_trigger per la PDT, non devi specificare un'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 il 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 in customer_id che in first_order_date. Per saperne di più 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"]
  }
}

Per saperne di più su come i gruppi di dati funzionano con le PDT, consulta la pagina della documentazione 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 di Looker ricrea le PDT che utilizzano quel 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 rigenerate del gruppo di dati. Puoi aggiungere il parametro max_cache_age alla definizione del gruppo di dati se vuoi personalizzare una 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 alla reimpostazione automatica della cache delle query eseguita 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 sottoparametro max_cache_age.

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

Gli esempi seguenti 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 valore 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 rimanda al criterio di memorizzazione nella cache orders_datagroup, che diventerà il criterio di memorizzazione nella cache predefinito per tutte le esplorazioni del 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 pianificate

I gruppi di dati possono essere utilizzati anche per attivare l'invio di una dashboard o di un Look. Con questa opzione, Looker invierà i dati quando il gruppo di dati è stato completato, in modo che i contenuti pianificati siano aggiornati.

Utilizzare il riquadro di amministrazione per i gruppi di dati

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

Memorizzazione nella cache delle query con persist_for

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

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

  • I gruppi di dati possono sincronizzarsi con il processo ETL del database.
  • Puoi riutilizzare i gruppi di dati in diversi modelli ed esplorazioni. Ciò significa che puoi aggiornare il valore max_cache_age di un gruppo di dati e il criterio di memorizzazione nella cache verrà aggiornato 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.