Problème
- Atomicité d’une seule table pour les chargements massifs : une approche courante consiste à insérer dans des clés partielles temporaires, puis à copier les enregistrements vers la clé définitive et à supprimer les enregistrements temporaires. Cette approche est peu performante, en particulier à l’étape de suppression, qui peut représenter plus de 90 % du temps total de l’opération.
- Cohérence entre plusieurs tables : lorsqu’un pipeline charge correctement la table A mais échoue sur la table B, la table A est déjà validée et ne peut pas être annulée. Les analystes qui interrogent les deux tables voient alors des données désynchronisées.
Contexte
INSERT réussit, toutes les lignes de ce bloc sont visibles ; s’il échoue, aucune ne l’est. Cependant, il n’existe pas de mécanisme intégré permettant de valider atomiquement des données réparties sur plusieurs insertions ou plusieurs tables.
Les commandes de manipulation de partition (MOVE PARTITION TO TABLE, REPLACE PARTITION, ATTACH PARTITION FROM) agissent au niveau des métadonnées lorsque les tables source et de destination partagent la même politique de stockage.
Cela signifie qu’elles s’exécutent presque instantanément, quelle que soit la taille des données, ce qui en fait des briques de base idéales pour des schémas d’échange atomique.
Solution recommandée
Étape par étape pour l’atomicité sur une seule table
Créer une table intermédiaire
Utilisez le même schéma, la même clé de partition, le mêmeORDER BY et la même politique de stockage que la table de production.Insérer des données dans la table intermédiaire
Exécutez votre insert sur la table intermédiaire plutôt que sur la table de production.Si l’insert échoue, tronquez et réessayez
Tronquez la table intermédiaire et relancez le chargement. Aucune donnée de production n’a été affectée.Si l’insert réussit, déplacez les partitions en production
Pour déplacer les données en production et les supprimer de la table intermédiaire, utilisezMOVE PARTITION.ATTACH PARTITION.Nettoyer la table intermédiaire
Une fois toutes les partitions déplacées, tronquez la table intermédiaire afin de la laisser vide pour le prochain chargement.Cohérence entre plusieurs tables
Exigences et contraintes
MOVE PARTITION TO TABLE, REPLACE PARTITION et ATTACH PARTITION FROM, les tables source et de destination doivent avoir :
- La même structure de colonnes
- La même clé de partitionnement, la même clé
ORDER BYet la même clé primaire - La même politique de stockage
- La table de destination doit inclure tous les index et toutes les projections de la table source
Exemple
Références
- Manipuler les partitions et les parts
- Pour en savoir plus sur cette stratégie, consultez l’article de blog Supercharging your large ClickHouse data loads - Part 3: Making a large data load resilient.