05 Benchmark et bascule
Guide d’animation du benchmark et de la bascule — fermeture de l’écart en deux passages, pièges de l’import des tableaux de bord et ordre de suppression.
Complément formateur du module participant 05 Benchmark et bascule.
Durée
Environ 45 minutes réparties en cinq étapes : ajout des tableaux de bord ClickHouse (étape 1, quelques minutes avec l’import scripté), exécution du benchmark (étape 2, sept requêtes multipliées par trois exécutions sur deux moteurs — quelques minutes, presque entièrement autonomes mais assez courtes pour les observer), bascule elle-même (étape 3, interactive : arrêter le producteur, rattraper le delta, actualiser dbt, démarrer le producteur ClickHouse, chaque action étant volontairement ordonnée), vérification de la parité (étape 4, rapide) et suppression des environnements (étape 5).
À FAIRE : la documentation du laboratoire ne précise pas la durée de chaque étape au-delà
du total de 45 minutes. Confirmez la répartition pendant la répétition, en particulier
que le passage de rattrapage --resume de l’étape 3 reste systématiquement assez rapide
(de quelques secondes à quelques minutes, selon le laboratoire) pour ne pas nécessiter
de marge supplémentaire.
Fil conducteur
- C’est le module qui transforme « préparé » en « migré ». Les modules 03 et 04 ont validé les données et le pipeline ; celui-ci valide un chiffre (le benchmark) et démontre le déplacement effectif du chemin d’écriture (la bascule).
- L’ordre de la bascule constitue le contenu du module, pas une formalité : arrêtez le
producteur Snowflake, exécutez
--resumepour refermer l’écart, actualisez dbt, puis démarrez le producteur ClickHouse. Chaque étape dépend de la précédente ; les exécuter dans le désordre produit précisément une erreur de parité silencieuse (voir Erreurs courantes). - Expliquez pourquoi
--resumeest rapide ici alors que la migration initiale du module 03 ne l’était pas : le script part dumax(pickup_at)déjà présent dans ClickHouse et ne récupère que le delta. Un écart ouvert depuis le module 01 se referme donc en quelques secondes ou minutes, et non par un nouveau transfert de 40 à 50 minutes. - Reliez la bascule à l’état vide de
agg_hourly_zone_tripsau module 04 : elle est remplie pour la première fois lorsque le producteur ClickHouse démarre, car son filtre n’a jamais correspondu qu’aux lignes d’un producteur actif. C’est la réponse à la question que posent les partenaires depuis le module 04. - C’est le dernier module avant l’évaluation écrite. Rappelez au groupe de conserver
migration-plan.mdet le CSV du benchmark dans un endroit accessible, car la suppression de l’étape 5 élimine les deux environnements cloud.
Erreurs courantes
- Un partenaire importe manuellement le ZIP des tableaux de bord dans l’interface
Superset au lieu d’exécuter
add_clickhouse_connection.sh. L’hôte ClickHouse de l’export enregistré a été remplacé paryour-instance.clickhouse.cloud. Le script corrige l’URI à partir de.envavant l’import, tandis qu’un import manuel conserve l’hôte fictif et la connexion échoue. Demandez au partenaire de modifier ensuite la connexion afin d’utiliser le véritableCLICKHOUSE_HOSTet les bons identifiants. - Un partenaire saute le passage de rattrapage
--resumeà l’étape 3 et effectue tout de même la bascule. ClickHouse perd définitivement toutes les lignes arrivées entre la migration initiale du module 03 et l’arrêt du producteur : une erreur de parité silencieuse. La vérification de l’étape 4 est conçue pour la détecter, à condition d’être exécutée ; un partenaire qui passe directement au compte rendu du benchmark ne remarquera pas les lignes perdues. - Le producteur Snowflake a déjà été arrêté dans le module 01 ou 02 par un partenaire soucieux de « ranger ». La bascule n’a aucun écart à mesurer si le producteur n’a pas tourné en continu ; cela invalide toute la démonstration, pas seulement cette étape. La correction honnête consiste à redémarrer le producteur, à le laisser écrire quelques minutes pour créer un écart réel, puis à poursuivre. Il est impossible de démontrer rétroactivement un écart qui n’a jamais existé.
- La vérification de parité échoue (écart supérieur à 0,01 %). Relancez le rattrapage
puis la vérification :
python scripts/02_migrate_trips.py --resume, puisbash scripts/01_verify_migration.sh. - Superset affiche
403 Forbidden. Le cookie de session a expiré : déconnectez-vous, reconnectez-vous surhttp://localhost:8088, puis relancezsuperset/add_clickhouse_connection.sh. - Le benchmark affiche
N/Apour une requête, le plus souvent Q7. Le script n’a pas réussi à se connecter à ClickHouse. Vérifiez queCLICKHOUSE_HOSTest défini (source .clickhouse_state) et que le service fonctionne.
Étapes de réinitialisation
- Échec de la vérification de parité : relancez
python scripts/02_migrate_trips.py --resume, puisbash scripts/01_verify_migration.sh. - Annulation de la bascule (bascule inverse) : exécutez
docker stop nyc_taxi_ch_producer, puis redémarrez le producteur Snowflake depuisworkshop_public/snowflake_migration_lab/01-setup-snowflake/supersetavecdocker-compose --env-file ../.env up -d producer. - Réinitialisation complète :
source .env && ./teardown.shdepuisworkshop_public/snowflake_migration_lab/03-migrate-to-clickhouse/détruit le service ClickHouse Cloud et le conteneur du producteur ClickHouse (si la bascule a eu lieu). Snowflake n’est pas touché par ce script : supprimez-le séparément avecsource .env && ./teardown.shdepuisworkshop_public/snowflake_migration_lab/01-setup-snowflake/. - Avant toute suppression, vérifiez que
migration-plan.mdet le CSV du benchmark (scripts/benchmark_results_<timestamp>.csv) sont enregistrés dans un endroit accessible. Les deux environnements cloud disparaissent ensuite, et le module 06 a précisément besoin de ces deux fichiers, sans rien d’autre.