- DETACH PARTITION|PART — Déplace une partition ou une partie de données dans le répertoire
detachedet la détache. - DROP PARTITION|PART — Supprime une partition ou une partie de données.
- DROP DETACHED PARTITION|PART - Supprime une partie de données, ou toutes les parties de données d’une partition, depuis
detached. - FORGET PARTITION — Supprime les métadonnées d’une partition de ZooKeeper si elle est vide.
- ATTACH PARTITION|PART — Ajoute à la table une partition ou une partie de données depuis le répertoire
detached. - ATTACH PARTITION FROM — Copie la partition de données d’une table vers une autre et l’y ajoute.
- REPLACE PARTITION — Copie la partition de données d’une table vers une autre et la remplace.
- MOVE PARTITION TO TABLE — Déplace la partition de données d’une table vers une autre.
- CLEAR COLUMN IN PARTITION — Réinitialise la valeur d’une colonne spécifiée dans une partition.
- CLEAR INDEX IN PARTITION — Réinitialise l’index secondaire spécifié dans une partition.
- FREEZE PARTITION — Crée une sauvegarde d’une partition.
- UNFREEZE PARTITION — Supprime la sauvegarde d’une partition.
- FETCH PARTITION|PART — Télécharge une partie de données ou une partition depuis un autre serveur.
- MOVE PARTITION|PART — Déplace une partition/partie de données vers un autre disque ou volume.
- UPDATE IN PARTITION — Met à jour les données à l’intérieur de la partition selon une condition.
- DELETE IN PARTITION — Supprime les données à l’intérieur de la partition selon une condition.
- REWRITE PARTS — Réécrit complètement les parties de données de la table (ou d’une partition spécifique).
DETACH PARTITION|PART
detached. Le serveur oublie cette partition de données détachée comme si elle n’existait pas. Le serveur n’aura pas connaissance de ces données tant que vous n’aurez pas exécuté la requête ATTACH.
Exemple :
detached — les supprimer du système de fichiers ou simplement les laisser.
Cette requête est répliquée : elle déplace les données vers le répertoire detached sur toutes les répliques. Notez que vous ne pouvez exécuter cette requête que sur une réplique leader. Pour savoir si une réplique est leader, exécutez la requête SELECT sur la table system.replicas. Sinon, il est plus simple d’effectuer une requête DETACH sur toutes les répliques : toutes les répliques renvoient une exception, sauf les répliques leader (car plusieurs leaders sont autorisés).
DROP PARTITION|PART
DROP DETACHED PARTITION|PART
detached.
Pour en savoir plus sur la définition de l’expression de partition, consultez la section Comment définir l’expression de partition.
FORGET PARTITION
ATTACH PARTITION|PART
detached. Il est possible d’ajouter des données pour une partition entière ou pour une part distincte. Exemples :
detached.
Si des données existent, la requête en vérifie l’intégrité. Si tout est correct, la requête ajoute les données à la table.
Si la réplique non initiatrice qui reçoit la commande ATTACH trouve la part avec les checksums corrects dans son propre répertoire detached, elle attache les données sans les récupérer depuis d’autres répliques.
S’il n’existe aucune part avec les checksums corrects, les données sont téléchargées depuis n’importe quelle réplique qui possède cette part.
Vous pouvez placer des données dans le répertoire detached sur une réplique et utiliser la requête ALTER ... ATTACH pour les ajouter à la table sur toutes les répliques.
ATTACH PARTITION FROM
table1 vers table2.
Notez que :
- Les données ne seront supprimées ni de
table1ni detable2. table1peut être une table temporaire.
- Les deux tables doivent avoir la même structure.
- Les deux tables doivent avoir la même clé de partition, la même clé ORDER BY et la même clé primaire.
- Les deux tables doivent avoir la même politique de stockage.
- La table de destination doit inclure tous les index et toutes les projections de la table source. Si le paramètre
enforce_index_structure_match_on_partition_manipulationest activé pour la table de destination, les index et les projections doivent être identiques. Sinon, la table de destination peut contenir un surensemble des index et projections de la table source.
REPLACE PARTITION
table1 vers table2 et remplace la partition existante dans table2. L’opération est atomique.
Notez que :
- Les données ne seront pas supprimées de
table1. table1peut être une table temporaire.
- Les deux tables doivent avoir la même structure.
- Les deux tables doivent avoir la même clé de partition, la même clé ORDER BY et la même clé primaire.
- Les deux tables doivent avoir la même politique de stockage.
- La table de destination doit inclure tous les index et toutes les projections de la table source. Si le paramètre
enforce_index_structure_match_on_partition_manipulationest activé dans la table de destination, les index et les projections doivent être identiques. Sinon, la table de destination peut avoir un surensemble des index et des projections de la table source.
MOVE PARTITION TO TABLE
table_source vers table_dest et supprime les données de table_source.
Pour que la requête s’exécute correctement, les conditions suivantes doivent être remplies :
- Les deux tables doivent avoir la même structure.
- Les deux tables doivent avoir la même clé de partition, la même clé ORDER BY et la même clé primaire.
- Les deux tables doivent avoir la même politique de stockage.
- Les deux tables doivent appartenir à la même famille de moteurs (répliquée ou non répliquée).
- La table de destination doit inclure tous les index et toutes les projections de la table source. Si le paramètre
enforce_index_structure_match_on_partition_manipulationest activé pour la table de destination, les index et les projections doivent être identiques. Sinon, la table de destination peut contenir un surensemble des index et projections de la table source.
CLEAR COLUMN IN PARTITION
DEFAULT a été définie lors de la création de la table, cette requête affecte à la colonne la valeur par défaut spécifiée.
Exemple :
FREEZE PARTITION
PARTITION est omise, la requête crée la sauvegarde de toutes les partitions en une seule fois.
L’intégralité du processus de sauvegarde s’effectue sans arrêter le serveur.
2019) ; la requête crée alors la sauvegarde de toutes les partitions correspondantes. Pour en savoir plus sur la définition de l’expression de partition, consultez la section Comment définir l’expression de partition.
Au moment de l’exécution, pour créer un instantané des données, la requête crée des liens physiques vers les données de la table. Ces liens physiques sont placés dans le répertoire /var/lib/clickhouse/shadow/N/..., où :
/var/lib/clickhouse/est le répertoire de travail de ClickHouse spécifié dans la configuration.Nest le numéro incrémental de la sauvegarde.- si le paramètre
WITH NAMEest spécifié, la valeur du paramètre'backup_name'est utilisée à la place du numéro incrémental.
Si vous utilisez un ensemble de disques pour le stockage des données d’une table, le répertoire
shadow/N apparaît sur chaque disque et stocke les parties de données correspondant à l’expression PARTITION./var/lib/clickhouse/. La requête exécute chmod sur tous les fichiers afin d’en interdire l’écriture.
Après avoir créé la sauvegarde, vous pouvez copier les données de /var/lib/clickhouse/shadow/ vers le serveur distant, puis les supprimer du serveur local. Notez que la requête ALTER t FREEZE PARTITION n’est pas répliquée. Elle crée une sauvegarde locale uniquement sur le serveur local.
La requête crée la sauvegarde presque instantanément (mais elle attend d’abord que les requêtes en cours sur la table correspondante soient terminées).
ALTER TABLE t FREEZE PARTITION copie uniquement les données, pas les métadonnées de la table. Pour sauvegarder les métadonnées de la table, copiez le fichier /var/lib/clickhouse/metadata/database/table.sql
Pour restaurer des données à partir d’une sauvegarde, procédez comme suit :
- Créez la table si elle n’existe pas. Pour voir la requête, utilisez le fichier .sql (remplacez-y
ATTACHparCREATE). - Copiez les données du répertoire
data/database/table/à l’intérieur de la sauvegarde vers le répertoire/var/lib/clickhouse/data/database/table/detached/. - Exécutez les requêtes
ALTER TABLE t ATTACH PARTITIONpour ajouter les données à la table.
max_threads.
Pour plus d’informations sur les sauvegardes et la restauration des données, consultez la section “Sauvegarde et restauration dans ClickHouse”.
UNFREEZE PARTITION
frozen portant le nom spécifié. Si la clause PARTITION est omise, la requête supprime la sauvegarde de toutes les partitions d’un seul coup.
CLEAR INDEX IN PARTITION
CLEAR COLUMN, mais elle réinitialise un index au lieu des données d’une colonne.
FETCH PARTITION|PART
- Télécharge la partition|partie de données depuis le shard spécifié. Dans ‘path-in-zookeeper’, vous devez indiquer le chemin vers le shard dans ZooKeeper.
- Ensuite, la requête place les données téléchargées dans le répertoire
detachedde la tabletable_name. Utilisez la requête ATTACH PARTITION|PART pour ajouter les données à la table.
- FETCH PARTITION
- FETCH PART
- La requête
ALTER ... FETCH PARTITION|PARTn’est pas répliquée. Elle place la partie de données ou la partition dans le répertoiredetacheduniquement sur le serveur local. - La requête
ALTER TABLE ... ATTACHest répliquée. Elle ajoute les données à toutes les répliques. Les données sont ajoutées à l’une des répliques à partir du répertoiredetached, et aux autres à partir des répliques voisines.
ALTER TABLE, elle ne modifie pas la structure de la table et ne change pas immédiatement les données disponibles dans la table.
MOVE PARTITION|PART
MergeTree. Voir Utilisation de plusieurs périphériques de bloc pour le stockage des données.
ALTER TABLE t MOVE :
- N’est pas répliquée, car différentes répliques peuvent avoir des politiques de stockage différentes.
- Renvoie une erreur si le disque ou le volume spécifié n’est pas configuré. La requête renvoie également une erreur si les conditions de déplacement des données définies dans la politique de stockage ne peuvent pas être appliquées.
- Peut renvoyer une erreur si les données à déplacer ont déjà été déplacées par un processus d’arrière-plan, une requête
ALTER TABLE t MOVEconcurrente ou à la suite d’une fusion de données en arrière-plan. L’utilisateur ne doit effectuer aucune action supplémentaire dans ce cas.
UPDATE IN PARTITION
Exemple
Voir aussi
DELETE IN PARTITION
Exemple
REWRITE PARTS
use_const_adaptive_granularity, ne sont par défaut appliqués qu’aux parties de données nouvellement écrites.
Exemple
Voir aussi
Comment définir l’expression de partition
ALTER ... PARTITION de différentes manières :
- Comme une valeur de la colonne
partitionde la tablesystem.parts. Par exemple,ALTER TABLE visits DETACH PARTITION 201901. - En utilisant le mot-clé
ALL. Il ne peut être utilisé qu’avec DROP/DETACH/ATTACH/ATTACH FROM. Par exemple,ALTER TABLE visits ATTACH PARTITION ALL. - Comme un tuple d’expressions ou de constantes correspondant (par leurs types) au tuple des clés de partitionnement de la table. Dans le cas d’une clé de partitionnement à un seul élément, l’expression doit être enveloppée dans la fonction
tuple (...). Par exemple,ALTER TABLE visits DETACH PARTITION tuple(toYYYYMM(toDate('2019-01-25'))). - En utilisant l’ID de partition. L’ID de partition est un identifiant de chaîne de la partition (lisible par l’humain, si possible), utilisé comme nom des partitions dans le système de fichiers et dans ZooKeeper. L’ID de partition doit être spécifié dans la clause
PARTITION ID, entre guillemets simples. Par exemple,ALTER TABLE visits DETACH PARTITION ID '201901'. - Dans les requêtes ALTER ATTACH PART et DROP DETACHED PART, pour spécifier le nom d’une partie de données, utilisez un littéral de chaîne contenant une valeur de la colonne
namede la table system.detached_parts. Par exemple,ALTER TABLE visits ATTACH PART '201901_1_1_0'.
String, vous devez indiquer son nom entre guillemets ('). Pour les types Date et Int*, aucun guillemet n’est nécessaire.
Toutes les règles ci-dessus s’appliquent également à la requête OPTIMIZE. Si vous devez spécifier l’unique partition lors de l’optimisation d’une table non partitionnée, définissez l’expression PARTITION tuple(). Par exemple :
IN PARTITION spécifie la partition à laquelle les expressions UPDATE ou DELETE sont appliquées à la suite de la requête ALTER TABLE. De nouvelles parties de données sont créées uniquement à partir de la partition spécifiée. Ainsi, IN PARTITION permet de réduire la charge lorsque la table est divisée en un grand nombre de partitions et que vous n’avez besoin de mettre à jour les données que ponctuellement.
Des exemples de requêtes ALTER ... PARTITION sont présentés dans les tests 00502_custom_partitioning_local et 00502_custom_partitioning_replicated_zookeeper.