LIFETIME (définie en secondes).
LIFETIME correspond à l’intervalle de mise à jour des dictionnaires entièrement téléchargés et à l’intervalle d’invalidation des dictionnaires mis en cache.
Pendant les mises à jour, l’ancienne version d’un dictionnaire reste interrogeable.
Les mises à jour de dictionnaires ne bloquent pas les requêtes, sauf lors de leur chargement initial.
Si une erreur se produit pendant une mise à jour, elle est consignée dans le journal du serveur, et les requêtes peuvent continuer à utiliser l’ancienne version du dictionnaire.
Si la mise à jour d’un dictionnaire réussit, l’ancienne version du dictionnaire est remplacée de manière atomique.
Exemple de paramètres :
<lifetime>0</lifetime> (LIFETIME(0)) empêche les dictionnaires de se mettre à jour.
Vous pouvez définir un intervalle de temps pour les mises à jour, et ClickHouse choisira un instant aléatoire de manière uniforme dans cette plage. Cela permet de répartir la charge sur la source du dictionnaire lors des mises à jour sur un grand nombre de serveurs.
Exemple de paramètres :
<min>0</min> et <max>0</max>, ClickHouse ne recharge pas le dictionnaire en fonction du délai d’expiration.
Dans ce cas, ClickHouse peut recharger le dictionnaire plus tôt si le fichier de configuration du dictionnaire a été modifié ou si la commande SYSTEM RELOAD DICTIONARY a été exécutée.
Lors de la mise à jour des dictionnaires, le serveur ClickHouse applique une logique différente selon le type de source :
- Pour un fichier texte, il vérifie l’heure de modification. Si elle diffère de celle enregistrée précédemment, le dictionnaire est mis à jour.
- Les dictionnaires provenant d’autres sources sont mis à jour à chaque fois par défaut.
- La table du dictionnaire doit comporter un champ qui change systématiquement lorsque les données de la source sont mises à jour.
- Les paramètres de la source doivent spécifier une requête qui récupère le champ variable. Le serveur ClickHouse interprète le résultat de la requête comme une ligne, et si cette ligne a changé par rapport à son état précédent, le dictionnaire est mis à jour. Spécifiez la requête dans le champ
<invalidate_query>des paramètres de la source.
Cache, ComplexKeyCache, SSDCache et SSDComplexKeyCache, les mises à jour synchrones et asynchrones sont prises en charge.
Les dictionnaires Flat, Hashed, HashedArray et ComplexKeyHashed peuvent également ne demander que les données modifiées depuis la mise à jour précédente. Si update_field est défini dans la configuration de la source du dictionnaire, la valeur de l’horodatage de la mise à jour précédente, en secondes, sera ajoutée à la requête de données. Selon le type de source (Executable, HTTP, MySQL, PostgreSQL, ClickHouse ou ODBC), une logique différente sera appliquée à update_field avant de demander les données à une source externe.
- Si la source est HTTP,
update_fieldest ajouté en tant que paramètre de requête, avec comme valeur l’heure de la dernière mise à jour. - Si la source est Executable,
update_fieldest ajouté en tant qu’argument du script exécutable, avec comme valeur l’heure de la dernière mise à jour. - Si la source est ClickHouse, MySQL, PostgreSQL ou ODBC, une condition
WHEREsupplémentaire est ajoutée, dans laquelleupdate_fieldest comparé à l’heure de la dernière mise à jour avec l’opérateur supérieur ou égal.- Par défaut, cette condition
WHEREest vérifiée au niveau le plus élevé de la requête SQL. Il est également possible de la vérifier dans n’importe quelle autre clauseWHEREde la requête à l’aide du mot-clé{condition}. Exemple :
- Par défaut, cette condition
update_field est définie, l’option supplémentaire update_lag peut également être définie. La valeur de l’option update_lag est soustraite de l’heure de la mise à jour précédente avant la requête des données mises à jour.
Exemple de paramètres :