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 rundbt 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는 모든 업스트림 의존성을 다시 실행하는 대신 오류 지점부터 이어서 실행해요.

더 알아보기 (Learn more)