Vue d’ensemble du TTL
- Suppression des anciennes données : sans surprise, vous pouvez supprimer des lignes ou des colonnes après un intervalle de temps donné
- Déplacement des données entre les disques : après un certain temps, vous pouvez déplacer les données entre des volumes de stockage, ce qui est utile pour déployer une architecture hot/warm/cold
- Agrégation des données : agrégez vos anciennes données en diverses agrégations et calculs utiles avant de les supprimer
Le TTL peut être appliqué à des tables entières ou à des colonnes spécifiques.
Syntaxe TTL
TTL peut apparaître après la définition d’une colonne et/ou à la fin de la définition de la table. Utilisez la clause INTERVAL pour définir une durée (la colonne concernée devant être de type Date ou DateTime). Par exemple, la table suivante comporte deux colonnes
avec des clauses TTL :
- La colonne x a une durée de vie d’un mois à partir de la colonne timestamp
- La colonne y a une durée de vie d’un jour à partir de la colonne timestamp
- Lorsque l’intervalle arrive à son terme, la colonne expire. ClickHouse remplace la valeur de la colonne par la valeur par défaut de son type de données. Si toutes les valeurs de la colonne dans la partie de données expirent, ClickHouse supprime cette colonne de la partie de données dans le système de fichiers.
Les règles TTL peuvent être modifiées ou supprimées. Consultez la page Manipulations du TTL de table pour plus de détails.
Déclenchement des événements TTL
merge_with_ttl_timeout: le délai minimal, en secondes, avant de relancer une fusion avec suppression TTL. La valeur par défaut est de 14400 secondes (4 heures).merge_with_recompression_ttl_timeout: le délai minimal, en secondes, avant de relancer une fusion avec recompression TTL (règles qui agrègent les données avant de les supprimer). Valeur par défaut : 14400 secondes (4 heures).
Ce n’est pas une solution idéale (et nous ne vous recommandons pas de l’utiliser fréquemment), mais vous pouvez aussi forcer une fusion avec
OPTIMIZE :OPTIMIZE lance une fusion non planifiée des parts de votre table, et FINAL force une nouvelle optimisation si votre table ne comporte déjà plus qu’une seule part.Suppression des lignes
where.
Plusieurs conditions sont autorisées :
Suppression de colonnes
customers et ajoutons un TTL de 2 heures pour ces deux colonnes :
Mise en œuvre d’une agrégation
GROUP BY à votre expression TTL, ainsi que quelques colonnes dans votre table pour stocker les résultats agrégés.
Supposons que, dans la table hits suivante, nous voulions supprimer les anciennes lignes, tout en conservant la somme et le maximum des colonnes hits avant de les supprimer. Nous aurons besoin d’un champ pour stocker ces valeurs, et nous devrons ajouter une clause GROUP BY à la clause TTL afin d’agréger la somme et le maximum :
hits :
- Les colonnes
GROUP BYde la clauseTTLdoivent constituer un préfixe de laPRIMARY KEY, et nous voulons regrouper nos résultats au début de la journée. Par conséquent,toStartOfDay(timestamp)a été ajouté à la clé primaire - Nous avons ajouté deux champs pour stocker les résultats agrégés :
max_hitsetsum_hits - Il est nécessaire de définir la valeur par défaut de
max_hitsetsum_hitssurhitspour que notre logique fonctionne, compte tenu de la façon dont la clauseSETest définie
Mise en œuvre d’une architecture hot/warm/cold
Si vous utilisez ClickHouse Cloud, les étapes de cette leçon ne s’appliquent pas. Vous n’avez pas à vous préoccuper du déplacement des anciennes données dans ClickHouse Cloud.
TO DISK et TO VOLUME de la commande TTL. (D’ailleurs, il ne s’agit pas nécessairement d’une logique hot/cold : vous pouvez utiliser TTL pour déplacer les données selon n’importe quel cas d’usage.)
- Les options
TO DISKetTO VOLUMEfont référence aux noms des disques ou des volumes définis dans vos fichiers de configuration de ClickHouse. Créez un nouveau fichier nommémy_system.xml(ou avec le nom de votre choix) qui définit vos disques, puis définissez des volumes qui utilisent ces disques. Placez le fichier XML dans/etc/clickhouse-server/config.d/pour que la configuration soit prise en compte par votre système :
- La configuration ci-dessus fait référence à trois disques pointant vers des dossiers sur lesquels ClickHouse peut lire et écrire. Les volumes peuvent contenir un ou plusieurs disques - nous avons défini un volume pour chacun des trois disques. Examinons les disques :
- Et maintenant… vérifions les volumes :
- Nous allons maintenant ajouter une règle
TTLqui déplace les données entre les volumes hot, warm et cold :
- La nouvelle règle
TTLdevrait être appliquée, mais vous pouvez en forcer l’application pour vous en assurer :
- Vérifiez que vos données ont bien été déplacées sur les disques attendus à l’aide de la table
system.parts: