dbt에서 로컬 상태

dbt에서 로컬 상태 (About local state in dbt)

dbt의 연산은 무상태(stateless)이고 멱등(idempotent)하다는 근본 가정에서 출발해요. dbt는 상태를 아티팩트로 저장하며, --state 플래그로 이전 실행의 아티팩트를 활용해 상태 셀렉터, defer, clone을 가능하게 해요.

출처: 문서

본문

만들어진 상태 경험이 필요하신가요?—변경되지 않은 모델을 다시 실행하지 않기 위해 dbt에서 만들어진 상태 경험을 원한다면 dbt State를 확인해 보세요. dbt State가 활성화된 셀프 호스팅 배포에서는 모든 state:* 셀렉터가 manifest.json을 관리하지 않고도 노드별 세분화를 위한 비교 소스로 dbt State를 사용할 수 있어요. 자세한 내용은 dbt State 기반 state:* 셀렉터를 참고하세요.

여기서 멱등성이 중요한 이유 (Why idempotence matters here)

상태 선택과 지연(deferral)은 모델이 멱등적이라는 것, 즉 같은 입력으로 다시 실행하면 같은 결과를 돌려준다는 것에 의존해요. 자세한 내용은 Idempotence in dbt를 참고하세요.

dbt에 대한 가장 근본적인 가정 중 하나는 그 연산이 무상태이고 멱등적이어야 한다는 것이에요. 즉 모델이 이전에 몇 번 실행되었는지, 실행된 적이 있는지조차 중요하지 않아요. 한 번 실행하든 천 번 실행하든 상관없어요. 같은 원시 데이터가 주어지면 같은 변환 결과를 기대할 수 있어요. 특정 dbt 실행은 다른 실행에 대해 "알" 필요가 없어요. 프로젝트의 코드와 데이터베이스에 현재 존재하는 객체만 알면 돼요.

그렇긴 하지만 dbt는 "상태"를 저장해요 — 프로젝트 리소스(노드라고도 함), 데이터베이스 객체, 실행 결과에 대한 상세하고 시점별(point-in-time) 뷰를 아티팩트 형태로 저장해요. 원한다면 dbt는 이 아티팩트를 사용해 특정 연산에 정보를 제공할 수 있어요. 결정적으로, 그 연산 자체는 여전히 무상태이고 멱등적이에요: 같은 매니페스트와 같은 원시 데이터가 주어지면 dbt는 같은 변환 결과를 만들어요.

그 파일 경로가 --state 플래그에 전달되기만 하면 dbt는 이전 실행의 아티팩트를 활용할 수 있어요. 이는 다음의 전제 조건이에요:

  • 상태 셀렉터: dbt가 현재 프로젝트의 코드를 상태 매니페스트와 비교해 새롭거나 수정된 리소스를 식별할 수 있어요.
  • 다른 환경으로의 지연(deferring): dbt가 현재 환경에 존재하지 않는 업스트림의 선택되지 않은 리소스를 식별하고, 그 참조를 상태 매니페스트가 제공하는 환경으로 "지연"할 수 있어요.
  • dbt clone 명령: dbt가 --state 플래그에 제공된 매니페스트의 위치를 기반으로 노드를 클론할 수 있어요.

함께, 상태 셀렉터와 지연은 "슬림 CI"(slim CI)를 가능하게 해요. 우리는 향후 릴리스에서 --state 플래그에 전달된 아티팩트를 활용할 수 있는 더 많은 기능을 추가할 계획이에요.

더 알아보기 (Learn more)