04 Xây dựng lại pipeline dbt
Hướng dẫn cho người hướng dẫn về việc xây dựng lại pipeline dbt trên ClickHouse — vì sao bảng tổng hợp rỗng không phải là lỗi.
Tài liệu đồng hành của người hướng dẫn cho bài học của học viên 04 Xây dựng lại pipeline dbt.
Thời lượng
Khoảng 30 phút. Đoạn duy nhất có khoảng trống thực sự là lần dbt run thứ hai ở Bước 1
(khoảng 8-12 phút để xử lý 50 triệu dòng qua các model incremental) — ngắn đủ để thường không
cần một giờ nghỉ riêng, nhưng dài đủ để bạn nên thuyết minh thay vì ngồi xem trong im lặng.
Bước 2 (dictionary về zone) và các câu truy vấn kiểm chứng đều nhanh và có tính tương tác.
Nội dung trình bày
- Hãy định vị module này là chứng minh pipeline, không phải chứng minh dữ liệu: module 03 đã chứng minh ClickHouse có thể chứa 50 triệu dòng; module này chứng minh chính pipeline Medallion từ module 01 — các view staging, bảng fact incremental, việc nạp lại dimension, các test — chạy được trên ClickHouse với hình dạng không đổi.
- Cơ chế dbt duy nhất đáng dừng lại để nói:
delete_insertthay thế choMERGE INTO(ClickHouse không có câu lệnhMERGE), vàReplacingMergeTreelà lưới an toàn bên dưới nó, không phải thứ thay thế cho nó — nếudelete_inserthoàn tất bình thường thì RMT chẳng có gì phải dọn; nó chỉ quan trọng khi một lần chạy bị ngắt giữa đường. mv_live_trip_feedđáng được gọi tên rõ ràng: nó không có đối tượng tương ứng nào ở phía Snowflake. Một materialized view tiêu chuẩn chỉ luôn thấy các dòng trong lô dữ liệu đã kích hoạt nó; một materialized view REFRESHABLE chạy lại toàn bộ truy vấn của nó theo lịch, nên nó có thể duy trì một giá trị tổng hợp trên toàn bộ lịch sử. Đây là năng lực mới mà việc migration mang lại, không phải một bản port thẳng.- Hãy nói điều này trước khi có ai hỏi:
agg_hourly_zone_tripssẽ rỗng sau lầndbt runở Bước 1, và như vậy là đúng, không phải lỗi. Bộ lọc incremental của nó làWHERE pickup_at >= now() - INTERVAL 2 HOUR, chỉ khớp với các dòng do một producer đang chạy ghi vào; mọi dòng vừa được migrate đều là dữ liệu lịch sử. Nó sẽ còn rỗng cho tới khi module 05 khởi động producer ClickHouse tại thời điểm cutover. Các đối tác chắc chắn sẽ cho rằng pipeline bị lỗi — hãy đi trước câu hỏi đó.
Các lỗi thường gặp
agg_hourly_zone_tripstrả về 0 dòng sau Bước 1, và một đối tác báo đó là lỗi. Không phải lỗi — xem phần nội dung trình bày ở trên. Hãy xác nhậndim_taxi_zones(265 dòng) vàfact_trips(khoảng 50 triệu dòng) đã có dữ liệu như mong đợi trước khi dành thời gian choagg_hourly_zone_trips; nếu hai bảng đó đúng thì bảng tổng hợp rỗng đang hoạt động đúng như thiết kế. Đây là lỗi tiêu biểu của module này — hãy chờ đón câu hỏi đó ở mọi lần chạy.dbt runở Bước 1 thất bại hoặc không kết nối được. Module này phụ thuộc vào profile dbt cho ClickHouse mà module 03 đáng lẽ đã tạo (~/.dbt/profiles.yml,nyc_taxi_ch). Nếu profile đó bị thiếu — xem "Configure the dbt profile" ở Bước 2 trong 03 Cấp phát và di chuyển dữ liệu — thì Bước 1 sẽ thất bại ở đây, trễ một module so với nguyên nhân gốc.- TODO: mục
## dbt on ClickHousetrong trang Troubleshooting của site không có entry riêng cho một lỗi chỉ xuất hiện ở bước này. Hãy ghi lại ở đây bất cứ điều gì đặc thù phát hiện trong buổi tổng duyệt.
Các bước reset
- Cứ chạy lại
dbt runthoải mái — nó là incremental và an toàn để lặp lại; không có gì ở đây cần teardown. - Sau khi thay đổi một model hoặc schema dbt, buộc dựng lại toàn bộ các model incremental:
dbt run --full-refresh(từworkshop_public/snowflake_migration_lab/03-migrate-to-clickhouse/dbt/nyc_taxi_dbt_ch). - Nếu dictionary về zone trông sai hoặc cũ, chỉ cần chạy lại
scripts/04_create_dictionary.sql— đó làCREATE OR REPLACE DICTIONARY, an toàn để chạy lại mà không cần drop gì trước. - Không có bước reset ở cấp môi trường nào áp dụng ở đây — teardown của module này chính là
workshop_public/snowflake_migration_lab/03-migrate-to-clickhouse/teardown.shđã nói ở module 03; đừng chạy nó khi đang giữa module.
03 Cấp phát và di chuyển dữ liệu
Hướng dẫn cho người hướng dẫn về module cấp phát ClickHouse và di chuyển dữ liệu — quá trình truyền dữ liệu tự chạy 40 đến 50 phút và profile dbt bị thiếu.
05 Benchmark và cutover
Hướng dẫn cho người hướng dẫn về benchmark và cutover — việc đóng khoảng chênh lệch qua hai lượt, các cạm bẫy khi import dashboard, và trình tự teardown.