Looker réduit la charge pesant sur votre 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 de conservation des résultats mis en cache dans 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:
Lorsqu'une requête SQL est exécutée à partir d'une exploration, d'une présentation ou d'un tableau de bord, Looker vérifie le cache pour voir si des résultats sont déjà mis en cache pour cette requête. Les résultats mis en cache ne sont 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.
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.
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écute la requête sur la base de données. Les nouveaux résultats de la requête sont 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, ainsi que les options permettant de synchroniser votre règle de conservation du cache avec le processus ETL (extraction, transformation et chargement) 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 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 stratégie de conservation du cache d'un modèle avec la planification 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 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. Utiliser le 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 Mettre en cache des requêtes avec persist_for.
Si un groupe de données ou un persist_for
est défini pour une exploration ou un modèle, la règle de mise en cache est modifiée comme suit:
- Avant l'expiration de l'intervalle
persist_for
ou de l'intervallemax_cache_age
du groupe de données: si la requête est exécutée à nouveau, Looker extrait les données du cache. - Lorsque l'intervalle
persist_for
ou l'intervallemax_cache_age
du groupe de données expire: Looker supprime les données du cache. - Après l'expiration de l'intervalle
persist_for
ou de l'intervallemax_cache_age
du groupe de données: si la requête est exécutée à nouveau, Looker extrait directement les données de la base de données et réinitialise l'intervallepersist_for
oumax_cache_age
.
Un point important 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 de LRU (Least Recently Used), sans garantie que les données dont les intervalles persist_for
ou max_cache_age
ont expiré soient supprimées toutes en même temps.
Réduire le temps passé par vos données dans le cache
Looker écrit toujours les résultats de la 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 jusqu'à 10 minutes. Toutes les données client stockées dans le cache de disque sont chiffrées selon la norme AES (Advanced Encryption Standard).
Pour réduire la durée de stockage des données dans le cache:
- Pour tout paramètre
persist_for
(pour un modèle ou une exploration) oumax_cache_age
(pour un groupe de données), définissez la valeur sur0 minutes
. Looker supprime le cache lorsque l'intervallepersist_for
expire ou lorsque les données atteignent l'intervallemax_cache_age
spécifié dans son groupe de données. (Il n'est pas nécessaire de définir le paramètrepersist_for
des PDT sur0 minutes
pour réduire la quantité de données stockées dans le cache. Les tables 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 valeursuggest_persist_for
spécifie la durée pendant laquelle Looker doit conserver les suggestions de filtre 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 réduire la durée de stockage de vos données dans le cache, définissez la valeursuggest_persist_for
sur une valeur inférieure, par exemple5 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 Run (Exécuter) après avoir exécuté une requête.
Lorsqu'une requête est renvoyée à partir du cache, le texte "à partir du cache" s'affiche. Sinon, la durée nécessaire pour renvoyer la requête est affichée.
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 avec 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 PDT à l'aide de groupes de données
Utilisez des groupes de données pour coordonner la planification ETL (extraction, transformation et chargement) de votre base de données avec la stratégie de mise en cache de Looker et la planification de la régénération des tables PDT.
Vous pouvez utiliser un groupe de données pour spécifier le déclencheur de régénération des tables 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 tables PDT sont recréées.
Vous pouvez également utiliser un groupe de données pour dissocier le déclencheur de la 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 mises à jour très fréquemment et jointes à une table PDT reconstruite moins fréquemment. Dans ce cas, vous pouvez choisir de réinitialiser le cache de requêtes plus fréquemment que la reconstruction de votre table PDT.
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 de tables PDT différentes pour différentes explorations et/ou tables PDT de votre projet.
Le paramètre datagroup
peut avoir 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'âge du cache d'une requête dépasse la période, Looker l'invalide. La prochaine fois que la requête sera émise, Looker l'enverra à la base de données pour obtenir des résultats à jour.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 un calendrier de déclenchement du groupe de données, par exemple"24 hours"
.
Un groupe de données doit comporter au moins le paramètre max_cache_age
, le paramètre sql_trigger
ou le paramètre interval_trigger
.
Voici un exemple de groupe de données avec un sql_trigger
configuré pour regénérer la table PDT tous les jours. De plus, max_cache_age
est défini pour vider le cache de requêtes toutes les deux heures, au cas où des explorations joindraient des tables PDT à d'autres données qui s'actualisent 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 aux explorations et aux PDT:
- Pour attribuer le groupe de données à une table PDT, utilisez le paramètre
datagroup_trigger
sous le paramètrederived_table
. Pour obtenir un exemple, consultez la section Utiliser un groupe de données pour spécifier un déclencheur de régénération pour les tables PDT de cette page. - Pour attribuer le groupe de données à une exploration, utilisez le paramètre
persist_with
au niveau du modèle ou au niveau de l'exploration. Pour obtenir un exemple, consultez la section Utiliser un groupe de données pour spécifier la réinitialisation du cache de requêtes pour les explorations de cette page.
Utiliser un groupe de données pour spécifier un déclencheur de régénération pour les tables PDT
Pour définir un déclencheur de régénération de la 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 table PDT, un avertissement s'affiche dans l'IDE Looker, et seule la datagroup_trigger
est utilisée.
Voici un exemple de définition de table 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 de tables dérivées, 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 données de référence, 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 recrée les tables PDT qui utilisent ce groupe de données comme stratégie de persistance. Une fois les tables PDT du groupe de données régénérées, Looker vide le cache des explorations qui utilisent les tables 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 un calendrier spécifié, en plus de la réinitialisation automatique du cache de requêtes effectuée par Looker lorsque les tables PDT du groupe de données sont recréées.
Pour définir une stratégie 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 sur les explorations, utilisez le paramètre persist_with
:
- Pour attribuer le groupe de données par défaut à toutes les explorations d'un modèle, utilisez le paramètre
persist_with
au niveau du modèle (dans un fichier de modèle). - Pour attribuer le groupe de données à des explorations individuelles, utilisez le paramètre
persist_with
sous un paramètreexplore
.
Les exemples suivants montrent un groupe de données nommé orders_datagroup
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 pendant 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 un maximum de 24 heures.
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'agit de la règle de mise en cache par défaut pour toutes les explorations du modèle. Toutefois, nous ne souhaitons pas utiliser la stratégie 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 une stratégie de mise en cache différente pour ces deux explorations. Les explorations orders
et orders_facts
n'ont pas de paramètre persist_with
. Elles utilisent donc la stratégie 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 éléments persist_with
et persist_for
sont spécifiés, vous recevrez un avertissement de validation et persist_with
sera utilisé.
Utiliser un groupe de données pour déclencher des diffusions planifiées
Vous pouvez également utiliser des groupes de données pour déclencher la diffusion d'un tableau de bord ou d'un visuel. Avec cette option, Looker envoie vos données une fois le groupe de données terminé, afin que le contenu planifié soit à jour.
Utiliser le panneau Administration pour les groupes de données
Si vous disposez du rôle d'administrateur Looker, vous pouvez afficher les groupes de données existants sur la page Datagroups (Groupes de données) du panneau Admin (Administration). Vous pouvez voir la connexion, le modèle et l'état actuel de chaque groupe de données, ainsi qu'un libellé et une description pour chaque groupe de données (si spécifié dans le code LookML). Vous pouvez également réinitialiser le cache d'un groupe de données, le déclencher ou accéder au code LookML du groupe de données.
Mettre en cache des requêtes avec persist_for
Utilisez le paramètre persist_for
au niveau du modèle ou de l'exploration pour modifier l'intervalle de rétention par défaut du cache de Looker (1 heure). Vous pouvez définir des intervalles aussi courts que 0 minutes
et aussi longs que 8760 hours
(1 an) ou plus.
La définition de paramètres persist_for
peut être plus rapide et plus simple, mais moins robuste que la définition de 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 la règle de mise en cache sera mise à jour à chaque endroit où le groupe de données est utilisé. - Vous pouvez effacer tout le cache associé à un groupe de données depuis la page Groupes de données.