on_error
on_error (오류 시 하위 모델 처리)
on_error 설정은 실행 중에 모델이 실패했을 때 다운스트림(하위) 모델이 어떻게 될지를 제어해요. skip_children(기본값)과 continue 두 값을 받아요. dbt v1.12 또는 dbt "v1 Latest" 릴리스 트랙에서 사용할 수 있어요.
출처: dbt 공식 문서
본문
설정 방법
프로젝트 파일
dbt_project.yml
models:
<resource-path>:
+on_error: skip_children | continue
프로퍼티 파일
models/properties.yml
models:
- name: [<model-name>]
config:
on_error: skip_children | continue
SQL 설정
models/<model_name>.sql
{{ config(
on_error="skip_children" | "continue"
) }}
정의
on_error 설정은 실행 중에 모델이 실패했을 때 다운스트림(하위) 모델이 어떻게 될지를 제어해요. 이 설정은 모델에만 적용되고 테스트에는 효과가 없어요. 테스트 실패 후 다운스트림 모델 실행 여부를 제어하려면 대신 테스트의 severity 설정을 사용해요.
on_error는 두 값을 받아요.
skip_children(기본값): 모델이 실패하면 모든 다운스트림 모델이 건너뛰어져요.continue: 모델이 실패해도 다운스트림 모델이 건너뛰어지지 않고 계속 실행돼요.
예시
업스트림 모델이 실패해도 다운스트림 모델이 의미 있게 계속 실행될 수 있을 때(예: fallback 로직이나 독립적인 데이터 소스가 있을 때) on_error: continue를 설정해요.
models/my_model.sql
{{ config(
materialized='table',
on_error='continue'
) }}
select 1 as id
실패한 모델에 on_error가 continue로 설정돼 있으면 dbt는 다운스트림 모델을 건너뛰지 않고 실행해요. 실패한 모델은 여전히 실행 결과에 오류로 표시되고, 다운스트림 모델이 모두 성공해도 전체 실행은 여전히 실패해요.
--fail-fast 플래그는 on_error: continue보다 우선해요. --fail-fast가 설정되면 dbt는 첫 번째 실패에서 멈추고 on_error 설정과 무관하게 남은 모든 모델을 건너뛰어요.
여러 업스트림 모델이 있을 때의 동작
모델에 업스트림 모델이 여러 개면 skip_children이 continue보다 우선해요. 실패한 업스트림 모델 중 하나라도 skip_children을 쓰면, 다른 실패한 업스트림 모델이 continue를 써도 다운스트림 모델은 건너뛰어져요.
예를 들어 model_c가 model_a와 model_b 둘 다에 의존하는 DAG를 생각해 봐요.
model_a는on_error: skip_children사용model_b는on_error: continue사용
다음 표는 업스트림 모델의 결과에 따라 model_c가 어떻게 동작하는지 보여줘요.
model_a 결과 (skip_children) |
model_b 결과 (continue) |
model_c 동작 |
|---|---|---|
| 성공 | 성공 | 실행 |
| 오류 | 성공 | 건너뜀 |
| 성공 | 오류 | 실행 |
| 오류 | 오류 | 건너뜀 |
model_a가 오류면 model_c는 model_a가 skip_children을 쓰므로 항상 건너뛰어져요. model_b만 오류면 model_c는 model_b가 continue를 써서 다운스트림을 막지 않으므로 여전히 실행돼요.
더 알아보기 (Learn more)
- severity — 테스트 실패 심각도 설정
- --fail-fast — 첫 실패 시 모든 모델 건너뛰기