Il existe plusieurs façons de supprimer des données dans ClickHouse, chacune présentant ses propres avantages et performances. Choisissez la méthode appropriée en fonction de votre modèle de données et du volume de données à supprimer.
| Méthode | Syntaxe | Quand l’utiliser |
|---|
| Suppression légère | DELETE FROM [table] | À utiliser pour supprimer de petites quantités de données. Les lignes sont immédiatement exclues de toutes les requêtes SELECT ultérieures, mais ne sont d’abord marquées comme supprimées qu’en interne, sans être supprimées du disque. |
| Mutation de suppression | ALTER TABLE [table] DELETE | À utiliser lorsque les données doivent être supprimées du disque immédiatement (par exemple, pour des raisons de conformité). Affecte négativement les performances de SELECT. |
| Tronquer une table | TRUNCATE TABLE [db.table] | Supprime efficacement toutes les données d’une table. |
| Supprimer une partition | DROP PARTITION | Supprime efficacement toutes les données d’une partition. |
Voici un résumé des différentes façons de supprimer des données dans ClickHouse :
Les suppressions légères ont pour effet de marquer immédiatement les lignes comme supprimées, de sorte qu’elles soient automatiquement filtrées de toutes les requêtes SELECT ultérieures. La suppression effective de ces lignes intervient ensuite lors des cycles naturels de fusion, ce qui entraîne moins d’E/S. Par conséquent, il est possible que, pendant une période indéterminée, les données ne soient pas réellement supprimées du stockage et soient seulement marquées comme supprimées. Si vous devez garantir la suppression des données, utilisez plutôt la commande de mutation ci-dessus.
-- delete all data from 2018 with a lightweight delete. Not recommended.
DELETE FROM posts WHERE toYear(CreationDate) = 2018
La suppression de grands volumes de données avec l’instruction DELETE légère peut également nuire aux performances des requêtes SELECT. Cette commande n’est pas non plus compatible avec les tables comportant des projections.
Notez qu’une mutation est utilisée dans cette opération pour marquer les lignes supprimées (en ajoutant une colonne _row_exists), ce qui entraîne donc des E/S.
En général, les suppressions légères sont à privilégier par rapport aux mutations si la présence des données supprimées sur le disque peut être tolérée (par exemple, en l’absence d’exigences de conformité). Cette approche reste toutefois à éviter si toutes les données doivent être supprimées.
Pour en savoir plus sur les suppressions légères.
Les mutations de suppression peuvent être exécutées à l’aide d’une commande ALTER TABLE ... DELETE, par exemple.
-- delete all data from 2018 with a mutation. Not recommended.
ALTER TABLE posts DELETE WHERE toYear(CreationDate) = 2018
Celles-ci peuvent être exécutées soit de manière synchrone (par défaut si elles ne sont pas répliquées), soit de manière asynchrone (selon le paramètre mutations_sync). Ces opérations sont extrêmement gourmandes en E/S, car elles réécrivent toutes les parts correspondant à l’expression WHERE. Ce processus n’offre aucune atomicité : les parts sont remplacées par des parts mutées dès qu’elles sont prêtes, et une requête SELECT qui commence à s’exécuter pendant une mutation verra à la fois les données des parts déjà mutées et celles des parts qui ne le sont pas encore. Les utilisateurs peuvent suivre l’état d’avancement via la table system.mutations. Ces opérations sont très intensives en E/S et doivent être utilisées avec parcimonie, car elles peuvent affecter les performances des SELECT sur le cluster.
Pour en savoir plus sur les mutations de suppression.
Si toutes les données d’une table doivent être supprimées, utilisez la commande TRUNCATE TABLE indiquée ci-dessous. Il s’agit d’une opération légère.
Pour en savoir plus, consultez TRUNCATE TABLE.
Si vous avez défini une clé de partitionnement personnalisée pour vos données, il est possible de supprimer efficacement les partitions. Évitez le partitionnement à forte cardinalité.
ALTER TABLE posts (DROP PARTITION '2008')
Pour en savoir plus, consultez DROP PARTITION.
Ressources complémentaires
Dernière modification le 29 juin 2026