Mise en cache des requêtes

Looker réduit la charge pesant sur la base de données et améliore les performances en utilisant les résultats mis en cache des requêtes SQL précédentes, s'ils sont disponibles et si vos règles de mise en cache l'autorisent. Cette page décrit la stratégie de mise en cache par défaut de Looker, ainsi que les options disponibles pour modifier la durée des résultats mis en cache sur votre instance Looker.

Comment Looker utilise les requêtes mises en cache

Pour les requêtes SQL, le mécanisme de mise en cache de Looker fonctionne comme suit :

  1. Lorsqu'une requête SQL est exécutée à partir d'une exploration, d'un look ou d'un tableau de bord, Looker vérifie le cache pour voir s'il existe déjà des résultats mis en cache pour cette requête. Les résultats mis en cache ne seront utilisés que si tous les aspects de la requête sont identiques, y compris les champs, les filtres, les paramètres et les limites de lignes.

  2. Si des résultats mis en cache sont trouvés, Looker vérifie la règle de mise en cache définie dans le modèle LookML pour déterminer si les résultats mis en cache ont expiré. Si les résultats mis en cache n'ont pas expiré, Looker les utilise pour la requête.

  3. Si aucun résultat mis en cache n'est trouvé pour la requête ou si les résultats mis en cache ont expiré, Looker exécutera la requête sur la base de données. Les résultats de la nouvelle requête seront alors mis en cache.

La règle de conservation du cache par défaut est d'une heure. La section suivante, Modifier les règles de conservation du cache, explique comment raccourcir ou allonger cette durée, et décrit les options permettant de synchroniser votre règle de conservation du cache avec le processus ETL (extract, transform, and load) de votre base de données.

Modifier les règles de conservation du cache

Vous pouvez spécifier des règles de conservation du cache au niveau de l'exploration LookML et au niveau du modèle LookML.

Le mécanisme de mise en cache recommandé consiste à utiliser un paramètre datagroup au niveau du modèle. Les groupes de données vous permettent de synchroniser la règle de conservation du cache d'un modèle avec le calendrier ETL de votre base de données à l'aide du paramètre sql_trigger et en définissant un intervalle d'expiration du cache avec le paramètre max_cache_age. Pour en savoir plus, consultez la section Mise en cache des requêtes et régénération de tables dérivées persistantes (PDT) à l'aide de groupes de données.

Pour une approche plus simple, vous pouvez utiliser le paramètre persist_for au niveau du modèle ou au niveau de l'exploration. L'utilisation du paramètre persist_for de cette manière vous permet de définir un intervalle d'expiration du cache qui remplace l'intervalle par défaut d'une heure. Toutefois, l'utilisation de persist_for est moins robuste que celle des groupes de données pour plusieurs raisons, comme indiqué dans la section Mise en cache des requêtes avec persist_for.

Si une exploration ou un modèle comporte un groupe de données ou un persist_for défini, la règle de mise en cache est modifiée comme suit :

  • Avant l'expiration de l'intervalle persist_for ou de l'intervalle max_cache_age du groupe de données : si la requête est réexécutée, Looker extrait les données du cache.
  • À l'expiration de l'intervalle persist_for ou de l'intervalle max_cache_age du groupe de données : Looker supprime les données du cache.
  • Après l'expiration de l'intervalle persist_for ou max_cache_age du groupe de données : si la requête est réexécutée, Looker extrait les données directement de la base de données et réinitialise l'intervalle persist_for ou max_cache_age.

Un point clé à retenir ici est que les données sont supprimées du cache lorsque l'intervalle persist_for ou max_cache_age expire.

Si le cache atteint la limite de stockage, les données sont éjectées en fonction d'un algorithme LRU (Least Recently Used, moins récemment utilisé). Il n'est pas garanti que les données dont les intervalles persist_for ou max_cache_age ont expiré seront supprimées en même temps.

Minimiser le temps passé par vos données dans le cache

Looker écrit toujours les résultats de requête dans le cache. Même si les intervalles persist_for et max_cache_age sont définis sur zéro, les données mises en cache peuvent toujours être stockées pendant 10 minutes maximum. Toutes les données client stockées dans le cache disque sont chiffrées selon la norme AES (Advanced Encryption Standard).

Pour minimiser la durée de stockage des données dans le cache :

  • Pour tout paramètre persist_for (pour un modèle ou une exploration) ou max_cache_age (pour un groupe de données), définissez la valeur sur 0 minutes. Looker supprime le cache lorsque l'intervalle persist_for expire ou lorsque les données atteignent l'intervalle max_cache_age spécifié dans son datagroup. Il n'est pas nécessaire de définir le paramètre persist_for des tables dérivées persistantes (PDT) sur 0 minutes pour minimiser la quantité de données stockées dans le cache. Les PDT sont écrites dans la base de données elle-même, et non dans le cache.)
  • Définissez le paramètre suggest_persist_for sur un petit intervalle. La valeur suggest_persist_for indique la durée pendant laquelle Looker doit conserver les suggestions de filtres dans le cache. Les suggestions de filtres reposent sur une requête portant sur les valeurs du champ filtré. Ces résultats de requête sont conservés dans le cache afin que Looker puisse fournir rapidement des suggestions à mesure que l'utilisateur saisit du texte dans le champ de texte du filtre. Par défaut, les suggestions de filtres sont mises en cache pendant six heures. Pour minimiser la durée de stockage de vos données dans le cache, définissez la valeur suggest_persist_for sur une valeur inférieure, par exemple 5 minutes.

Vérifier si une requête a été renvoyée à partir du cache

Dans une fenêtre Explorer, vous pouvez déterminer si une requête a été renvoyée à partir du cache en examinant les informations à côté du bouton Exécuter après avoir exécuté une requête.

Lorsque le résultat d'une requête est extrait du cache, le texte "from cache" (depuis le cache) s'affiche. Sinon, la durée nécessaire pour renvoyer la requête s'affiche.

Forcer la génération de nouveaux résultats à partir de la base de données

Dans une fenêtre Explorer, vous pouvez forcer la récupération de nouveaux résultats à partir de la base de données. Après avoir exécuté une requête (y compris les requêtes Résultats fusionnés), sélectionnez l'option Vider le cache et actualiser dans le menu en forme de roue dentée Actions d'exploration.

Mettre en cache des requêtes et recompiler des tables dérivées persistantes (PDT) avec des groupes de données

Utilisez des groupes de données pour coordonner le calendrier ETL (Extract, Transform and Load) de votre base de données avec la règle de mise en cache de Looker et le calendrier de régénération des tables dérivées persistantes (PDT).

Vous pouvez utiliser un groupe de données pour spécifier le déclencheur de régénération des PDT en fonction du moment où de nouvelles données sont ajoutées à votre base de données. Vous pouvez ensuite appliquer le même groupe de données à votre exploration ou à votre modèle afin que les résultats mis en cache expirent également lorsque vos PDT sont reconstruites.

Vous pouvez également utiliser un groupe de données pour dissocier le déclencheur de régénération des tables PDT de l'âge maximal du cache. Cela peut être utile si vous disposez d'une exploration basée à la fois sur des données qui sont mises à jour très fréquemment et jointes à une PDT qui est reconstruite moins souvent. Dans ce cas, vous pouvez souhaiter que votre cache de requêtes soit réinitialisé plus souvent que votre PDT n'est reconstruite.

Définir un groupe de données

Définissez un groupe de données avec le paramètre datagroup, soit dans un fichier de modèle, soit dans son propre fichier LookML. Vous pouvez définir plusieurs groupes de données si vous souhaitez appliquer des règles de mise en cache et de régénération des tables dérivées persistantes (PDT) différentes pour différents Explorers ou PDT de votre projet.

Le paramètre datagroup peut comporter les sous-paramètres suivants :

  • label : spécifie un libellé facultatif pour le groupe de données.
  • description : spécifie une description facultative du groupe de données, qui peut être utilisée pour expliquer son objectif et son mécanisme.
  • max_cache_age : spécifie une chaîne qui définit une période. Lorsque l'ancienneté du cache d'une requête dépasse la période, Looker invalide le cache. La prochaine fois que la requête sera émise, Looker l'enverra à la base de données pour obtenir des résultats actualisés.
  • sql_trigger : spécifie une requête SQL qui renvoie une ligne avec une colonne. Si la valeur renvoyée par la requête est différente des résultats précédents de la requête, le groupe de données passe à l'état déclenché.
  • interval_trigger : spécifie une programmation pour déclencher le groupe de données, par exemple "24 hours".

Un groupe de données doit au minimum comporter le paramètre max_cache_age, sql_trigger ou interval_trigger.

Voici un exemple de groupe de données pour lequel un sql_trigger est configuré afin de régénérer la PDT tous les jours. De plus, le max_cache_age est défini pour vider le cache des requêtes toutes les deux heures, au cas où des explorations rejoindraient des PDT à d'autres données qui sont actualisées plus d'une fois par jour.

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

Une fois le groupe de données défini, vous pouvez l'attribuer à des explorations et des PDT :

Utiliser un groupe de données pour spécifier un déclencheur de régénération pour les PDT

Pour définir un déclencheur de régénération de PDT à l'aide de groupes de données, créez un paramètre datagroup avec le sous-paramètre sql_trigger ou interval_trigger. Attribuez ensuite le groupe de données à des tables PDT individuelles à l'aide du sous-paramètre datagroup_trigger dans la définition derived_table de la table PDT. Si vous utilisez datagroup_trigger pour votre PDT, vous n'avez pas besoin de spécifier d'autre stratégie de persistance pour la table dérivée. Si vous spécifiez plusieurs stratégies de persistance pour une PDT, un avertissement s'affiche dans l'IDE Looker et seule la stratégie datagroup_trigger sera utilisée.

Voici un exemple de définition de PDT qui utilise le groupe de données customers_datagroup. Cette définition ajoute également plusieurs index, à la fois sur customer_id et first_order_date. Pour en savoir plus sur la définition des PDT, consultez la page de documentation Tables dérivées dans Looker.

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

Pour en savoir plus sur le fonctionnement des groupes de données avec les PDT, consultez la page de documentation Tables dérivées dans Looker.

Utiliser un groupe de données pour spécifier la réinitialisation du cache des requêtes pour les explorations

Lorsqu'un groupe de données est déclenché, le régénérateur Looker régénère les PDT qui utilisent ce groupe de données comme stratégie de persistance. Une fois les PDT du groupe de données régénérées, Looker efface le cache des explorations qui utilisent les PDT régénérées du groupe de données. Vous pouvez ajouter le paramètre max_cache_age à la définition de votre groupe de données si vous souhaitez personnaliser un calendrier de réinitialisation du cache de requêtes pour le groupe de données. Le paramètre max_cache_age vous permet d'effacer le cache de requêtes selon une planification spécifique, en plus de la réinitialisation automatique du cache de requêtes que Looker effectue lorsque les PDT du groupe de données sont reconstruites.

Pour définir une règle de mise en cache des requêtes avec des groupes de données, créez un paramètre datagroup avec le sous-paramètre max_cache_age.

Pour spécifier un groupe de données à utiliser pour les réinitialisations du cache de requêtes dans les explorations, utilisez le paramètre persist_with :

L'exemple suivant montre un groupe de données nommé orders_datagroup qui est défini dans un fichier de modèle. Le groupe de données comporte un paramètre sql_trigger, qui spécifie que la requête select max(id) from my_tablename sera utilisée pour détecter quand un ETL a eu lieu. Même si l'ETL ne se produit pas avant un certain temps, le max_cache_age du groupe de données spécifie que les données mises en cache ne seront utilisées que pendant 24 heures maximum.

Le paramètre persist_with du modèle pointe vers la règle de mise en cache orders_datagroup, ce qui signifie qu'il s'agira de la règle de mise en cache par défaut pour toutes les explorations du modèle. Toutefois, nous ne voulons pas utiliser les règles de mise en cache par défaut du modèle pour les explorations customer_facts et customer_background. Nous pouvons donc ajouter le paramètre persist_with pour spécifier d'autres règles de mise en cache pour ces deux explorations. Les explorations orders et orders_facts ne comportent pas de paramètre persist_with. Elles utiliseront donc la règle de mise en cache par défaut du modèle : 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
  ...
}

Si les deux sont spécifiés, vous recevrez un avertissement de validation et le persist_with sera utilisé.persist_withpersist_for

Utiliser un groupe de données pour déclencher des livraisons planifiées

Les groupes de données peuvent également être utilisés pour déclencher l'envoi d'un tableau de bord ou d'un Look. Avec cette option, Looker envoie vos données lorsque le groupe de données est terminé, afin que le contenu planifié soit à jour.

Utiliser le panneau Admin pour les groupes de données

Si vous disposez du rôle d'administrateur Looker, vous pouvez utiliser la page Groupes de données du panneau Admin pour afficher les groupes de données existants. Vous pouvez consulter la connexion, le modèle et l'état actuel de chaque groupe de données, ainsi que le libellé et la description de chacun d'eux, si ces informations sont spécifiées dans le code LookML. Vous pouvez également réinitialiser le cache d'un groupe de données, déclencher le groupe de données ou accéder au LookML du groupe de données.

Mise en cache des requêtes avec persist_for

Utilisez le paramètre persist_for au niveau du modèle ou au niveau Explorer pour modifier l'intervalle de conservation du cache par défaut de Looker (1 heure). Vous pouvez définir des intervalles aussi petits que 0 minutes et aussi grands que 8760 hours (un an) ou plus.

Définir des paramètres persist_for peut être plus rapide et plus simple, mais moins robuste que définir des groupes de données. Nous vous recommandons d'utiliser des groupes de données plutôt que persist_for pour les raisons suivantes :

  • Les groupes de données peuvent se synchroniser avec le processus ETL de votre base de données.
  • Vous pouvez réutiliser des groupes de données dans plusieurs modèles et Explorations. Cela signifie que vous pouvez mettre à jour le max_cache_age d'un groupe de données, et que la règle de mise en cache sera mise à jour partout où le groupe de données est utilisé.
  • Vous pouvez effacer tout le cache associé à un groupe de données sur la page Groupes de données.