상태 선택 구성

상태 선택 구성 (Configure state selection)

statedefer는 CLI 플래그뿐 아니라 환경 변수로도 설정할 수 있어요. 이전 실행의 아티팩트(--state)와 result:·source_status: 셀렉터로 변경 사항과 이전 결과를 기반으로 리소스를 재실행하는 방법을 다뤄요.

출처: 문서

본문

statedefer는 환경 변수와 CLI 플래그로 모두 설정할 수 있어요:

  • --state 또는 (dbt v1.11 이상) DBT_ENGINE_STATE: 파일 경로
  • --defer 또는 (dbt v1.11 이상) DBT_ENGINE_DEFER: 불리언
  • --defer-state 또는 (dbt v1.11 이상) DBT_ENGINE_DEFER_STATE: deferral에만 사용할 파일 경로 (선택)

--defer-state가 지정되지 않으면 deferral은 --state가 제공하는 아티팩트를 사용해요. 이렇게 하면 한 환경이나 과거 시점의 논리적 상태와 비교하면서 다른 환경이나 시점의 적용된 상태로 defer할 때 더 세밀한 제어가 가능해요.

플래그와 env var가 모두 제공되면 플래그가 우선해요.

참고 (Notes)

  • --state 아티팩트는 현재 실행 중인 dbt 버전과 호환되는 스키마 버전이어야 해요.
  • 이들은 강력하고 복잡한 기능이에요. 상태 비교의 알려진 주의사항과 제한사항을 읽어 보세요.

Syntax deprecated — dbt v1.5에서 state(DBT_ARTIFACT_STATE_PATH)와 defer(DBT_DEFER_TO_STATE)의 원래 문법을 deprecated 했어요. dbt가 이전 문법과의 하위 호환성은 지원하지만, 아직 정해지지 않은 향후 릴리스에서 제거할 예정이에요.

"result" 상태 (The "result" status)

작업 상태의 또 다른 요소는 이전 dbt 실행의 결과예요. 예를 들어 dbt run을 실행한 후 dbt는 실행 시간과 dbt 모델의 성공/오류 상태를 담은 run_results.json 아티팩트를 생성해요. run_results.json에 대한 자세한 내용은 'run results' 페이지를 참고하세요.

다음 dbt 명령어는 결과를 이후 dbt 실행에서 참조할 수 있는 run_results.json 아티팩트를 생성해요:

  • dbt run
  • dbt test
  • dbt build
  • dbt seed

위 명령 중 하나를 실행한 후, 이후 명령에 셀렉터를 추가해 결과를 참조할 수 있어요:

(dbt v1.11 이상)

# You can also set the DBT_ENGINE_STATE environment variable instead of the --state flag.
dbt run --select "result:<status>" --defer --state path/to/prod/artifacts

사용 가능한 옵션은 리소스(노드) 유형에 따라 달라요:

result:<status> model seed snapshot test
result:error
result:success
result:skipped
result:fail
result:warn
result:pass

상태와 결과 셀렉터 결합 (Combining state and result selectors)

stateresult 셀렉터는 단일 dbt 실행에서 함께 사용해 이전 실행의 오류 또는 새롭거나 수정된 모델을 모두 캡처할 수 있어요.

dbt run --select "result:<status>+" state:modified+ --defer --state ./<dbt-artifact-path>

"source_status" 상태 (The "source_status" status)

작업 상태의 또 다른 요소는 이전 dbt 실행의 source_status예요. 예를 들어 dbt source freshness를 실행한 후 dbt는 dbt 소스의 실행 시간과 max_loaded_at 날짜를 담은 sources.json 아티팩트를 생성해요. sources.json에 대한 자세한 내용은 'sources' 페이지를 참고하세요.

dbt source freshness 명령은 결과를 이후 dbt 실행에서 참조할 수 있는 sources.json 아티팩트를 생성해요.

작업이 선택되면 dbt는 해당 작업의 가장 최근 성공한 실행에서 아티팩트를 표시해요. 그런 다음 dbt는 그 아티팩트를 사용해 fresh 소스 집합을 결정해요. 작업 명령에서 source_status:fresher+ 인자를 포함해 fresh한 소스와 그 자식에서만 실행하고 테스트하도록 dbt에 지시할 수 있어요. 이를 위해서는 이전과 현재 상태 모두 sources.json 아티팩트를 사용할 수 있어야 해요. 즉, 두 작업 상태 모두 dbt source freshness를 실행해야 해요.

dbt source freshness 명령을 실행한 후, 이후 명령에 셀렉터를 추가해 소스 freshness 결과를 참조할 수 있어요:

(dbt v1.11 이상)

# You can also set the DBT_ENGINE_STATE environment variable instead of the --state flag.
dbt source freshness # must be run again to compare current to previous state
dbt build --select "source_status:fresher+" --state path/to/prod/artifacts

더 많은 예시 명령은 Pro-tips for workflows 문서를 참고하세요.

더 알아보기 (Learn more)