Snowflake MigrationClickHouse Workshops

05 Benchmark dan cutover

Panduan fasilitator untuk benchmark dan cutover — penutupan selisih dua tahap, jebakan impor dashboard, dan urutan teardown.

Pendamping fasilitator untuk pelajaran learner 05 Benchmark dan cutover.

Waktu

Sekitar 45 menit untuk lima langkah: menambahkan dashboard ClickHouse (Step 1, sekitar dua menit lewat impor terskrip), menjalankan benchmark (Step 2, tujuh query kali tiga run kali dua engine — beberapa menit, sebagian besar tanpa pengawasan tetapi cukup singkat untuk sekadar ditonton), cutover-nya sendiri (Step 3, interaktif — hentikan producer, susul delta-nya, refresh dbt, mulai producer ClickHouse, masing-masing satu langkah yang disengaja secara berurutan), verifikasi paritas (Step 4, cepat), dan teardown (Step 5).

TODO: tidak ada waktu per langkah yang diberikan di materi lab itu sendiri di luar total 45 menit untuk modul ini — konfirmasi pembagiannya saat gladi bersih, terutama apakah tahap penyusulan --resume di Step 3 secara andal cukup cepat (detik sampai menit, menurut deskripsi lab itu sendiri) sehingga tidak butuh buffer apa pun.

Alur pembicaraan

  • Ini modul yang mengubah "siap" menjadi "termigrasi." Modul 03 dan 04 membuktikan data dan pipeline-nya; modul ini membuktikan sebuah angka (benchmark) dan membuktikan jalur tulisnya benar-benar berpindah (cutover).
  • Urutan cutover adalah kontennya di sini, bukan formalitas: hentikan producer Snowflake, jalankan --resume untuk menutup selisih, refresh dbt, lalu mulai producer ClickHouse. Setiap langkah bergantung pada langkah sebelumnya — menjalankannya di luar urutan adalah cara persis terjadinya kegagalan paritas yang senyap (lihat Kegagalan umum).
  • Katakan secara eksplisit mengapa --resume cepat di sini padahal migrasi awal modul 03 tidak: ia menandai watermark pada max(pickup_at) yang sudah ada di ClickHouse dan hanya mengambil delta-nya, sehingga selisih yang sudah terbuka sejak modul 01 tertutup dalam detik sampai menit, bukan transfer bulk 40-50 menit lagi.
  • Hubungkan cutover kembali ke keadaan kosong agg_hourly_zone_trips dari modul 04: ia terisi untuk pertama kalinya di seluruh lab begitu producer ClickHouse dimulai, karena filternya hanya pernah cocok dengan baris dari producer live. Ini adalah jawaban atas pertanyaan yang sudah diajukan partner sejak modul 04.
  • Ini modul terakhir sebelum asesmen tertulis — ingatkan ruangan untuk menyimpan migration-plan.md dan CSV benchmark di tempat yang bisa diakses setelah teardown Step 5 menghapus kedua lingkungan cloud.

Kegagalan umum

  • Partner mengimpor ZIP dashboard secara manual lewat UI Superset alih-alih menjalankan add_clickhouse_connection.sh. Ekspor yang di-commit memiliki host ClickHouse-nya disunting menjadi your-instance.clickhouse.cloud; skrip menambal URI dari .env sebelum mengimpor, tetapi impor manual lewat UI memakai host placeholder apa adanya dan koneksinya tidak akan tersambung. Minta mereka mengedit koneksi setelahnya agar mengarah ke CLICKHOUSE_HOST dan kredensial yang sebenarnya.
  • Partner melewatkan tahap penyusulan --resume di Step 3 dan tetap melakukan cutover. ClickHouse secara permanen kehilangan baris apa pun yang jatuh dalam selisih antara migrasi awal modul 03 dan saat producer berhenti — sebuah kegagalan paritas yang senyap. Pemeriksaan paritas di Step 4 dibangun untuk menangkap ini, tetapi hanya jika dijalankan; partner yang melompat langsung ke penulisan hasil benchmark tanpa menjalankan Step 4 tidak akan menyadari baris yang hilang.
  • Producer Snowflake sudah dihentikan sejak modul 01 atau 02 oleh partner yang bernaluri beres-beres. Cutover tidak punya apa pun untuk mengukur selisih jika producer tidak pernah berjalan terus-menerus — ini merusak seluruh demonstrasi cutover, bukan hanya langkah ini. Jika itu terjadi, perbaikan yang jujur adalah menjalankan ulang producer, biarkan ia menulis selama beberapa menit untuk membuat selisih nyata, lalu lanjutkan; tidak ada cara untuk secara retroaktif mendemonstrasikan selisih yang memang tidak pernah terbuka.
  • Pemeriksaan paritas gagal (perbedaan lebih besar dari 0,01%). Jalankan tahap penyusulan lagi dan periksa ulang: python scripts/02_migrate_trips.py --resume lalu bash scripts/01_verify_migration.sh.
  • Superset menampilkan 403 Forbidden. Cookie sesi kedaluwarsa — log out, log in kembali di http://localhost:8088, lalu jalankan ulang superset/add_clickhouse_connection.sh.
  • Benchmark menampilkan N/A untuk sebuah query, paling sering Q7. Skrip benchmark tidak bisa terhubung ke ClickHouse — konfirmasi CLICKHOUSE_HOST sudah diset (source .clickhouse_state) dan layanannya berjalan.

Langkah reset

  • Pemeriksaan paritas gagal: jalankan ulang python scripts/02_migrate_trips.py --resume lalu bash scripts/01_verify_migration.sh.
  • Cutover perlu dibatalkan (reverse cutover): docker stop nyc_taxi_ch_producer, lalu hidupkan kembali producer Snowflake dari workshop_public/snowflake_migration_lab/01-setup-snowflake/superset dengan docker-compose --env-file ../.env up -d producer.
  • Reset lingkungan penuh: source .env && ./teardown.sh dari workshop_public/snowflake_migration_lab/03-migrate-to-clickhouse/ menghancurkan layanan ClickHouse Cloud dan container producer ClickHouse (jika cutover sudah terjadi); Snowflake tidak disentuh skrip ini — bongkar terpisah dengan source .env && ./teardown.sh dari workshop_public/snowflake_migration_lab/01-setup-snowflake/.
  • Sebelum menjalankan salah satu teardown, konfirmasi migration-plan.md dan CSV benchmark (scripts/benchmark_results_<timestamp>.csv) sudah tersimpan di tempat yang bisa diakses — kedua lingkungan cloud hilang setelah ini, dan modul 06 hanya membutuhkan tepat dua file itu dan tidak ada yang lain.

Di halaman ini

ID