Memorizzazione nella cache delle query

Looker riduce il carico sul database e migliora le prestazioni utilizzando i risultati memorizzati nella cache delle query SQL precedenti, se disponibili e se questa funzione è consentita dai criteri 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.

Come 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 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 uguali, 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 li utilizza 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 nuovi risultati della query verranno memorizzati nella cache.

Il criterio di conservazione della cache predefinito è di un'ora. La sezione successiva, Modificare i criteri di conservazione della cache, illustra come accorciare o allungare questo periodo di tempo e descrive le opzioni per sincronizzare il criterio di conservazione della cache con il processo ETL (estrazione, trasformazione e caricamento) del database.

Modificare i criteri di conservazione della cache

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

Il meccanismo di memorizzazione nella cache consigliato è l'utilizzo di 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'utilizzo dei gruppi di dati per alcuni motivi, come discusso nella sezione Memorizzazione nella cache delle query con persist_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 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.
  • Al termine 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 è 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 Recently Used), senza alcuna garanzia che i dati con intervalli persist_for o max_cache_age scaduti vengano eliminati tutti contemporaneamente.

Riduci 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 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 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 sottoposto a filtro. I 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, puoi determinare se una query è stata restituita dalla cache esaminando le informazioni accanto al pulsante Esegui dopo aver eseguito una query.

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

Forzare la generazione di nuovi risultati dal database

In una finestra Esplorazione, puoi forzare il recupero di nuovi risultati dal database. Dopo aver eseguito una query (comprese le query unite dei risultati), seleziona la casella 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 e la pianificazione della ricreazione delle PDT di Looker.

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 l'attivatore della ricostruzione 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, ti consigliamo di reimpostare la cache delle query più spesso di quanto non venga ricostruito il PDT.

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 criteri di memorizzazione nella cache e di ricreazione delle PDT diversi per esplorazioni e/o PDT diverse 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, lo stato del gruppo di dati risulta attivato.
  • interval_trigger: specifica una pianificazione 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:

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

Per definire un attivatore di ricostruzione delle 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 un PDT, verrà visualizzato un avviso nell'IDE di Looker e verrà utilizzata solo la strategia datagroup_trigger.

Di seguito è riportato un esempio di definizione di una 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 il ripristino della cache delle query per le esplorazioni

Quando viene attivato un gruppo di dati, il rigeneratore Looker ricostruisce le PDT che utilizzano il gruppo di dati come strategia di persistenza. Una volta ricostruite le PDT del gruppo di dati, Looker cancella 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 una pianificazione di 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 punta al criterio di memorizzazione nella cache orders_datagroup, il che significa che questo sarà il criterio di memorizzazione nella cache predefinito per tutte le esplorazioni nel modello. Tuttavia, poiché non vogliamo utilizzare il criterio di memorizzazione nella cache predefinito del modello per le esplorazioni customer_facts e customer_background, 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 sono specificati sia persist_with che persist_for, riceverai un avviso di convalida e verrà utilizzato persist_with.

Utilizzo di un gruppo di dati per attivare le pubblicazioni 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 al termine del gruppo di dati, in modo che i contenuti pianificati siano aggiornati.

Utilizzo del riquadro Amministrazione per i gruppi di dati

Se disponi del 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 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 relativo codice LookML.

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 fino a 0 minutes e intervalli fino a 8760 hours (1 anno) o più.

La definizione dei parametri persist_for può essere più rapida e semplice, ma meno affidabile, 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 essere sincronizzati con il processo ETL del database.
  • Puoi riutilizzare i gruppi di dati in più 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 cancellare tutta la cache associata a un gruppo di dati dalla pagina Gruppi di dati.