dbt retry 명령어
dbt retry 명령어
dbt retry는 마지막 실행을 실패 지점부터 다시 실행해요. 실패 전에 실행된 노드가 없으면 아무것도 실행하지 않으므로 run_results.json을 확인하고 전체 작업을 수동으로 다시 실행하는 걸 권장해요.
출처: 문서
본문
Retry는 마지막 실행을 실패 지점부터 다시 실행해요.
- 실패 전에 실행된 노드가 없으면(예: 웨어하우스 연결·권한 오류로 run이 일찍 실패한 경우) 기록된 노드가 없으므로 retry는 아무것도 실행하지 않아요.
- 이런 경우
run_results.json파일을 확인하고 노드가 빌드되도록 전체 작업을 수동으로 다시 실행하는 걸 권장해요. - 몇몇 노드가 실행된 후에는 retry를 사용해 새 실패 지점부터 다시 실행할 수 있어요.
- 이전에 실행한 명령어가 성공적으로 완료됐다면 retry는
no operation으로 끝나요.
Retry 플래그
dbt retry 플래그는 셀프호스팅 dbt 설치 또는 Studio IDE를 사용할 때 적용돼요.
dbt platform CLI
클라우드 환경에 대해 dbt platform CLI를 사용한다면 dbt retry는 소수의 override만 받아요 — 보통 --threads, --vars 및 관련 옵션. 정확한 목록은 머신에서 dbt retry --help를 사용하세요.
(dbt v2.0 이상 적용)
dbt v2로 dbt retry를 실행할 때 지원되는 플래그:
| 플래그 | 입력 값 | 설명 | 예시 |
|---|---|---|---|
-t, --target |
target | 실행할 target | dbt retry -t prod |
--project-dir |
path | dbt 프로젝트를 로드할 디렉터리 | dbt retry --project-dir . |
--profile |
profile | 사용할 프로필 | dbt retry --profile jaffle_shop |
--profiles-dir |
path | 프로필을 로드할 디렉터리 | dbt retry --profiles-dir ~/.dbt |
--packages-install-path |
path | 패키지를 설치할 디렉터리 | dbt retry --packages-install-path dbt_packages |
--target-path |
path | 생성된 모든 자산의 출력 디렉터리 | dbt retry --target-path target |
--vars |
vars | 프로젝트용 변수(CLI 도움말에 표시된 형식 사용) | dbt retry --vars '{"my_var": "new_value"}' |
사용 가능한 전체 플래그 목록은 dbt retry --help를 실행하세요.
dbt v2 노드 선택
dbt v1의 dbt retry와 달리, dbt v2는 --select, --exclude, --selector로 무엇을 재시도할지 좁힐 수 있게 해줘요. 이 인자들은 retry 실행에서 이전 실행의 선택 집합을 상속만 하는 대신 override해요.
예시:
dbt retry --select my_model+
dbt retry --exclude package:analytics --selector nightly_models
지원 명령어
Retry는 다음 명령어와 함께 동작해요: build check compile clone docs generate seed snapshot test run run-operation
Retry는 어디서 시작할지 결정하기 위해 run_results.json을 참조해요. 이전 실패를 고치지 않고 retry를 실행하면 멱등(idempotent)한 결과가 나와요.
(dbt v2.0 이상 적용)
dbt retry로 Retry flags에 설명된 대로 새 --select, --exclude, --selector 인자를 선택적으로 전달해 retry 범위를 좁힐 수 있어요.
성공한 dbt run 후 dbt retry를 실행한 예시 결과:
Running with dbt=1.6.1
Registered adapter: duckdb=1.6.0
Found 5 models, 3 seeds, 20 tests, 0 sources, 0 exposures, 0 metrics, 348 macros, 0 groups, 0 semantic models
Nothing to do. Try checking your model configs and model specification args
dbt run이 모델에서 문법 오류를 만난 예시:
Running with dbt=1.6.1
Registered adapter: duckdb=1.6.0
Found 5 models, 3 seeds, 20 tests, 0 sources, 0 exposures, 0 metrics, 348 macros, 0 groups, 0 semantic models
Concurrency: 24 threads (target='dev')
1 of 5 START sql view model main.stg_customers ................................. [RUN]
2 of 5 START sql view model main.stg_orders .................................... [RUN]
3 of 5 START sql view model main.stg_payments .................................. [RUN]
1 of 5 OK created sql view model main.stg_customers ............................ [OK in 0.06s]
2 of 5 OK created sql view model main.stg_orders ............................... [OK in 0.06s]
3 of 5 OK created sql view model main.stg_payments ............................. [OK in 0.07s]
4 of 5 START sql table model main.customers .................................... [RUN]
5 of 5 START sql table model main.orders ....................................... [RUN]
4 of 5 ERROR creating sql table model main.customers ........................... [ERROR in 0.03s]
5 of 5 OK created sql table model main.orders .................................. [OK in 0.04s]
Finished running 3 view models, 2 table models in 0 hours 0 minutes and 0.15 seconds (0.15s).
Completed with 1 error and 0 warnings:
Runtime Error in model customers (models/customers.sql)
Parser Error: syntax error at or near "selct"
Done. PASS=4 WARN=0 ERROR=1 SKIP=0 TOTAL=5
오류를 고치지 않고 후속 dbt retry 실행이 실패한 예시:
Running with dbt=1.6.1
Registered adapter: duckdb=1.6.0
Found 5 models, 3 seeds, 20 tests, 0 sources, 0 exposures, 0 metrics, 348 macros, 0 groups, 0 semantic models
Concurrency: 24 threads (target='dev')
1 of 1 START sql table model main.customers .................................... [RUN]
1 of 1 ERROR creating sql table model main.customers ........................... [ERROR in 0.03s]
Done. PASS=4 WARN=0 ERROR=1 SKIP=0 TOTAL=5
오류를 고친 후 성공한 dbt retry 실행 예시:
Running with dbt=1.6.1
Registered adapter: duckdb=1.6.0
Found 5 models, 3 seeds, 20 tests, 0 sources, 0 exposures, 0 metrics, 348 macros, 0 groups, 0 semantic models
Concurrency: 24 threads (target='dev')
1 of 1 START sql table model main.customers .................................... [RUN]
1 of 1 OK created sql table model main.customers ............................... [OK in 0.05s]
Finished running 1 table model in 0 hours 0 minutes and 0.09 seconds (0.09s).
Completed successfully
Done. PASS=1 WARN=0 ERROR=0 SKIP=0 TOTAL=1
각 시나리오에서 dbt retry는 모든 업스트림 의존성을 다시 실행하는 대신 오류 지점부터 이어서 실행해요.