Snowflake MigrationClickHouse Workshops
계획 워크시트

워크시트 5: dbt 모델 설계

각 dbt 모델의 머티리얼라이제이션, 엔진, 증분 전략을 설정한다. 모든 답에 즉시 피드백이 제공된다.

예상 소요 시간: 15–20분 참고 자료: dbt on ClickHouse

개념

워크시트 1–4는 무엇을 만들어 냈다. 어떤 엔진, 어떤 ORDER BY, 어떤 ClickHouse 타입인지다. 이 워크시트는 어떻게를 만들어 낸다. SQL을 한 줄도 쓰기 전에 그 결정들을 dbt 설정으로 어떻게 표현하는지다.

dbt-clickhouse 모델에는 Snowflake 개발자가 신경 쓸 필요가 없던 세 계층의 설정이 있다.

  1. 머티리얼라이제이션 — dbt가 어떤 물리적 객체를 만드는가(view, table, incremental, ephemeral)?
  2. 엔진 설정 — 테이블과 증분 모델의 경우 어떤 ClickHouse 엔진과 버전 컬럼인가?
  3. 증분 전략 — 증분 모델의 경우 dbt가 신규/갱신된 행을 어떻게 처리하는가?

ReplacingMergeTree에만 있는 정확성 문제도 하나 있다.

  1. FINAL 배치 — 중복이 제거된 읽기를 보장하기 위해 dbt DAG의 어디에 FINAL을 두는가?

머티리얼라이제이션에는 다음 결정 트리를 사용하라.

  • 소스에서 삽입 전용으로 읽고, 모델 자체에는 쓰기가 없다? → view
  • 순수 조인 로직이고, 직접 쿼리되지 않는다? → ephemeral
  • dbt 실행마다 전체 재구축하고, 부분 업데이트는 없다? → table
  • 실행마다 신규/변경된 행만 처리한다? → incremental

스테이징 모델은 항상 뷰다 — 워크시트 1과 같은 규칙이다. stg_trips와 stg_taxi_zones는 자체 쓰기가 없는 통과 읽기이므로, 소스 데이터가 어떻게 동작하든 뷰로 남는다.

연습 1: 머티리얼라이제이션 선택

각 모델에 대해 올바른 dbt 머티리얼라이제이션을 선택한 다음, 표 아래 문제에서 그 이유에 답하라.

연습 2: 엔진 설정

table 또는 incremental 머티리얼라이제이션을 쓰는 모델만 ClickHouse 엔진이 필요하다 — 뷰와 ephemeral 모델에는 없다. 워크시트 1의 답을 참조하라. dbt 엔진 설정은 그곳에서 이미 내린 엔진 결정을 구현한 것이다.

연습 3: 증분 전략 설계

각 증분 모델에 대해 전체 증분 설정을 설계하라: unique_key, incremental_strategy, 그리고 is_incremental() 가드 블록 안에 들어가는 SQL 필터다.

{% if is_incremental() %}
  WHERE <your filter here>
{% endif %}

연습 4: FINAL 배치

ReplacingMergeTree의 중복 제거는 비동기다. FINAL은 읽기 시점에 그것을 강제한다 — 하지만 FINAL을 잘못된 모델에 두면 정확성이나 성능 측면에서 대가가 따른다. 아래 각 모델에 대해 FINAL이 그 모델 자신의 FROM 절에 들어가야 하는지 답하라.

Loading worksheet...

migration-plan.md로 옮기기

이 워크시트를 완료했으면 migration-plan.md의 Section 10을 자신의 답으로 채우고 다음을 체크하라.

- [ ] dbt model design: completed

이 페이지의 내용

Track your progress?

Optional. We email a link to confirm your address; progress records once you open it.

Please use your work email address, not a personal one.

Progress tracking also requires accepting the current Terms of Service in Privacy settings.

KO