04 dbt 파이프라인 재구축
ClickHouse에서 dbt 파이프라인을 재구축하는 데 대한 진행자 가이드 — 비어 있는 집계 테이블이 버그가 아닌 이유.
학습자 레슨 04 Rebuild the dbt pipeline에 대응하는 진행자용 안내입니다.
타이밍
약 30분. 실제로 비는 시간이 있는 구간은 Step 1의 두 번째 dbt run뿐입니다(증분 모델을
통해 5천만 행을 처리하는 데 대략 8-12분) — 따로 휴식을 둘 만큼 길지는 않지만, 조용히
지켜보기보다 설명을 얹을 만큼은 깁니다. Step 2(zone 딕셔너리)와 검증 쿼리는 빠르고
상호작용이 많습니다.
강의 흐름
- 이 모듈은 데이터가 아니라 파이프라인을 증명하는 것이라고 규정하세요. 모듈 03은 ClickHouse가 5천만 행을 담을 수 있음을 증명했고, 이 모듈은 모듈 01의 그 Medallion 파이프라인 — 스테이징 뷰, 증분 팩트 테이블, 디멘션 재적재, 테스트 — 이 구조상 변경 없이 ClickHouse에서 동작함을 증명합니다.
- 잠시 멈춰서 다룰 만한 dbt 메커니즘 하나:
delete_insert가MERGE INTO를 대체하고 (ClickHouse에는MERGE구문이 없습니다),ReplacingMergeTree는 그 아래의 안전망이지 대체물이 아닙니다 —delete_insert가 정상적으로 완료되면 RMT가 정리할 것이 없고, 실행이 중간에 중단된 경우에만 의미가 있습니다. mv_live_trip_feed는 이름을 직접 불러 짚어줄 만합니다. Snowflake에는 대응물이 전혀 없습니다. 표준 materialized view는 자신을 트리거한 배치의 행만 볼 수 있지만, REFRESHABLE materialized view는 정해진 일정에 따라 전체 쿼리를 다시 실행하므로 전체 기간 집계를 유지할 수 있습니다. 이것은 단순 이식이 아니라 마이그레이션이 추가하는 새로운 능력입니다.- 누가 묻기 전에 이렇게 말하세요.
agg_hourly_zone_trips는 Step 1의dbt run이후 비어 있을 것이고, 그것은 버그가 아니라 정상입니다. 이 모델의 증분 필터는WHERE pickup_at >= now() - INTERVAL 2 HOUR이며, 이는 살아 있는 프로듀서가 기록한 행만 일치시킵니다. 방금 마이그레이션된 모든 행은 과거 데이터입니다. 모듈 05에서 컷오버 시점에 ClickHouse 프로듀서를 시작할 때까지 계속 비어 있습니다. 파트너들은 어김없이 파이프라인이 깨졌다고 가정합니다 — 질문보다 앞서 나가세요.
흔한 실패 사례
- Step 1 이후
agg_hourly_zone_trips가 0행을 반환하고, 파트너가 이를 버그로 보고합니다. 버그가 아닙니다 — 위 강의 흐름을 보세요.agg_hourly_zone_trips에 시간을 쓰기 전에dim_taxi_zones(265행)와fact_trips(대략 5천만 행)가 예상대로 채워졌는지 확인하세요. 그 두 개가 맞다면, 비어 있는 집계 테이블은 설계 그대로 동작하는 것입니다. 이것이 이 모듈의 대표적인 실패입니다 — 매번 이 질문이 나올 것으로 예상하세요. - Step 1의
dbt run이 실패하거나 접속하지 못합니다. 이 모듈은 모듈 03에서 이미 만들어져 있어야 하는 ClickHouse dbt 프로필(~/.dbt/profiles.yml,nyc_taxi_ch)에 의존합니다. 그 프로필이 없다면 — 03 Provision and migrate의 Step 2 "Configure the dbt profile" 참고 — 근본 원인이 있는 모듈보다 한 모듈 늦게 여기 Step 1에서 실패합니다. - TODO: 사이트의
Troubleshooting 페이지의
## dbt on ClickHouse섹션에는 이 단계에서만 나타나는 실패에 대한 전용 항목이 없습니다. 리허설에서 발견한 내용을 여기에 기록하세요.
초기화 절차
dbt run은 자유롭게 다시 실행하세요 — 증분이며 반복해도 안전합니다. 여기서 teardown이 필요한 것은 없습니다.- dbt 모델이나 스키마를 변경한 뒤 증분 모델을 전체 재구축하려면
(
workshop_public/snowflake_migration_lab/03-migrate-to-clickhouse/dbt/nyc_taxi_dbt_ch에서)dbt run --full-refresh를 실행하세요. - zone 딕셔너리가 잘못되었거나 오래되어 보이면
scripts/04_create_dictionary.sql을 그냥 다시 실행하세요 —CREATE OR REPLACE DICTIONARY이므로 먼저 무언가를 드롭하지 않고도 다시 실행해도 안전합니다. - 여기에는 환경 수준의 초기화가 해당되지 않습니다 — 이 모듈의 teardown은 모듈 03에서 다룬
것과 같은
workshop_public/snowflake_migration_lab/03-migrate-to-clickhouse/teardown.sh입니다. 모듈 진행 중에는 실행하지 마세요.