Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Suppression de partitions

Contexte

Le partitionnement est spécifié sur une table lors de sa définition initiale via la clause PARTITION BY. Cette clause peut contenir une expression SQL portant sur n’importe quelle colonne, dont le résultat détermine vers quelle partition une ligne est envoyée.

Les parties de données sont logiquement associées à chaque partition sur le disque et peuvent être interrogées séparément. Dans l’exemple ci-dessous, nous partitionnons la table posts par année à l’aide de l’expression toYear(CreationDate). À mesure que des lignes sont insérées dans ClickHouse, cette expression est évaluée pour chaque ligne, qui est ensuite dirigée vers la partition correspondante si elle existe (si cette ligne est la première pour une année donnée, la partition sera créée).

 CREATE TABLE posts
(
        `Id` Int32 CODEC(Delta(4), ZSTD(1)),
        `PostTypeId` Enum8('Question' = 1, 'Answer' = 2, 'Wiki' = 3, 'TagWikiExcerpt' = 4, 'TagWiki' = 5, 'ModeratorNomination' = 6, 'WikiPlaceholder' = 7, 'PrivilegeWiki' = 8),
        `AcceptedAnswerId` UInt32,
        `CreationDate` DateTime64(3, 'UTC'),
...
        `ClosedDate` DateTime64(3, 'UTC')
)
ENGINE = MergeTree
ORDER BY (PostTypeId, toDate(CreationDate), CreationDate)
PARTITION BY toYear(CreationDate)

Consultez la section Comment définir l’expression de partition pour savoir comment définir l’expression de partition.

Dans ClickHouse, les utilisateurs doivent considérer le partitionnement avant tout comme une fonctionnalité de gestion des données, et non comme une technique d’optimisation des requêtes. En séparant logiquement les données selon une clé, chaque partition peut être manipulée indépendamment, par exemple supprimée. Cela permet de déplacer efficacement des partitions, et donc des sous-ensembles de données, entre les niveaux de stockage en fonction du temps, ou d’expirer des données/les supprimer efficacement du cluster.

Supprimer des partitions

ALTER TABLE ... DROP PARTITION permet de supprimer une partition entière à moindre coût.

ALTER TABLE table_name [ON CLUSTER cluster] DROP PARTITION|PART partition_expr

Cette requête marque la partition comme inactive et supprime complètement les données au bout d’environ 10 minutes. La requête est répliquée : elle supprime les données sur toutes les répliques.

Par exemple, ci-dessous, nous supprimons les posts de 2008 de la table précédente en supprimant la partition correspondante.

SELECT DISTINCT partition
FROM system.parts
WHERE `table` = 'posts'
┌─partition─┐
│ 2008      │
│ 2009      │
│ 2010      │
│ 2011      │
│ 2012      │
│ 2013      │
│ 2014      │
│ 2015      │
│ 2016      │
│ 2017      │
│ 2018      │
│ 2019      │
│ 2020      │
│ 2021      │
│ 2022      │
│ 2023      │
│ 2024      │
└───────────┘

17 rows in set. Elapsed: 0.002 sec.
ALTER TABLE posts
(DROP PARTITION '2008')
0 rows in set. Elapsed: 0.103 sec.
Navigation