7. 실전 팁¶
개발 워크플로우¶
# 1. 모델 작성/수정
# 2. 컴파일해서 SQL 확인
dbt compile --select my_model
# 3. 실행
dbt run --select my_model
# 4. 테스트
dbt test --select my_model
# 5. 한 번에 실행 + 테스트
dbt build --select my_model
dbt build = run + test
dbt build는 모델 실행과 테스트를 의존성 순서대로 함께 수행합니다.
직접 체험해보기¶
dbt build가 run과 test를 어떤 순서로 실행하는지 확인해보세요.
Terminal
jane@mac ~/my_project $ _
유용한 선택자 (Selector)¶
# 특정 모델과 모든 업스트림
dbt run --select +my_model
# 특정 모델과 모든 다운스트림
dbt run --select my_model+
# 특정 모델의 직접 업스트림만 (1단계)
dbt run --select 1+my_model
# 태그로 선택
dbt run --select tag:daily
# 폴더 전체
dbt run --select path:models/staging
# 변경된 모델만 (CI에서 유용)
dbt run --select state:modified+
자주 쓰는 매크로 패턴¶
날짜 스파인 (Date Spine)¶
-- macros/date_spine.sql
{% macro date_spine(start_date, end_date) %}
WITH dates AS (
SELECT
DATE_ADD('{{ start_date }}', INTERVAL seq DAY) AS date_day
FROM UNNEST(
GENERATE_ARRAY(0, DATE_DIFF('{{ end_date }}', '{{ start_date }}', DAY))
) AS seq
)
SELECT * FROM dates
{% endmacro %}
환경별 분기¶
{% macro limit_data_in_dev(column_name, dev_days=3) %}
{% if target.name == 'dev' %}
WHERE {{ column_name }} >= DATE_SUB(CURRENT_DATE(), INTERVAL {{ dev_days }} DAY)
{% endif %}
{% endmacro %}
-- 사용:
SELECT * FROM {{ ref('stg_events') }}
{{ limit_data_in_dev('event_at') }}
packages.yml 활용¶
커뮤니티 패키지를 활용하면 생산성이 올라갑니다.
# packages.yml
packages:
- package: dbt-labs/dbt_utils
version: "1.1.1"
- package: dbt-labs/codegen
version: "0.12.1"
dbt_utils 유용 매크로¶
-- surrogate key 생성
{{ dbt_utils.generate_surrogate_key(['user_id', 'event_date']) }}
-- pivot
{{ dbt_utils.pivot('event_type', dbt_utils.get_column_values(ref('stg_events'), 'event_type')) }}
-- union 여러 소스
{{ dbt_utils.union_relations(
relations=[ref('events_web'), ref('events_app')]
) }}
디버깅 팁¶
컴파일된 SQL 확인¶
dbt compile --select my_model
# target/compiled/ 에서 렌더링된 SQL 확인
cat target/compiled/my_project/models/marts/my_model.sql
로그 확인¶
흔한 실수들¶
주의할 점
- ref() 안 쓰고 테이블명 직접 쓰기 → 의존성 꼬임
- staging에서 비즈니스 로직 넣기 → 유지보수 어려움
- incremental 모델에서
is_incremental()빼먹기 → 첫 실행 에러 - profiles.yml을 Git에 커밋하기 → 비밀번호 노출 위험
튜토리얼 완료!
dbt의 기본기를 모두 다뤘습니다. 실제 프로젝트에 적용하면서 더 깊이 학습해보세요!