dbt run 명령어

dbt run 명령어

dbt run 명령어는 프로젝트의 모델을 빌드·재빌드해요. 컴파일된 SQL을 현재 target 데이터베이스에 대해 실행해 모델을 구체화하며, 인크리멘탈 모델의 전체 새로고침이나 특정 모델 선택도 지원해요.

출처: 문서

본문

개요

dbt run 명령어는 모델에만 적용돼요. 테스트, 스냅샷, 시드 등 다른 리소스 유형은 실행하지 않아요. 그런 명령어를 실행하려면 dbt commands 섹션의 적절한 명령어(예: dbt test, dbt snapshot, dbt seed)를 사용하세요. 또는 dbt build를 리소스 유형 선택자와 함께 사용하세요.

프로젝트의 모델을 빌드하거나 재빌드하고 싶을 때 dbt run 명령어를 사용할 수 있어요.

dbt run은 어떻게 동작하나요?

  • dbt run은 컴파일된 SQL 모델 파일을 현재 target 데이터베이스에 대해 실행해요.
  • dbt는 target 데이터베이스에 연결하고, 지정된 materialization 전략을 사용해 모든 데이터 모델을 구체화하는 데 필요한 관련 SQL을 실행해요.
  • 모델은 컴파일 중 생성된 의존성 그래프가 정의한 순서대로 실행돼요. 지능적인 멀티스레딩으로 의존성을 위반하지 않으면서 실행 시간을 최소화해요.
  • 새 모델을 배포할 때 이전 버전을 파괴하는 경우가 흔한데, 이때 dbt run은 각 모델을 먼저 임시 이름으로 빌드한 다음 단일 트랜잭션 안에서 drop·rename을 수행(트랜잭션을 지원하는 어댑터의 경우)해 다운타임을 최소화해요.

인크리멘탈 모델 새로고침

dbt run--full-refresh 플래그를 제공하면 dbt는 인크리멘탈 모델을 테이블 모델처럼 취급해요. 이는 다음 때 유용해요:

  • 인크리멘탈 모델의 스키마가 바뀌어 재생성해야 할 때.
  • 모델 코드의 새 로직 때문에 인크리멘탈 모델 전체를 다시 처리하고 싶을 때.

bash

dbt run --full-refresh

짧은 이름으로도 지정할 수 있어요: dbt run -f.

dbt 컴파일 컨텍스트에서 이 플래그는 flags.FULL_REFRESH로 사용 가능해요. 또한 --full-refresh 플래그를 지정하면 is_incremental() 매크로는 모든 모델에 대해 false를 반환해요.

models/example.sql

select * from all_events

-- if the table already exists and `--full-refresh` is
-- not set, then only add new records. otherwise, select
-- all records.
{% if is_incremental() %}
   where collector_tstamp > (
     select coalesce(max(max_tstamp), '0001-01-01') from {{ this }}
   )
{% endif %}

특정 모델 실행

dbt는 구체화하고 싶은 특정 모델을 선택할 수도 있게 해줘요. 다양한 간격으로 다른 모델 집합을 실행하는 게 더 나은 특별한 시나리오에서 유용해요. 새 모델을 개발·테스트하는 동안 구체화할 테이블을 제한하고 싶을 때도 도움이 돼요.

자세한 내용은 Model Selection Syntax Documentation을 참고하세요.

특정 모델의 부모·자식 실행에 대한 자세한 내용은 Graph Operators Documentation을 참고하세요.

(dbt v2.0 이상 적용)

dbt Information Schema

--generate-info-schema를 사용해 dbt Information Schema를 버전이 있는 하위 디렉터리(현재 v1/)의 target/info_schema/에 기록해요. Information Schema는 프로젝트의 메타데이터를 쿼리 가능한 SQL 테이블(데이터베이스의 INFORMATION_SCHEMA와 유사)로 노출해서, manifest.json을 파싱하지 않고도 모델·소스 등을 조회할 수 있어요.

dbt run --generate-info-schema

dbt.node_columnsdbt.column_lineage에 컬럼 타입과 컬럼 레벨 계통을 채우려면 --static-analysis strict를 결합하세요. 없으면 dbt.node_columns·dbt.column_lineage에는 컬럼 타입과 계통이 없어요.

dbt run --generate-info-schema --static-analysis strict

경고를 오류로 처리하기 — global configs 참조. 빠른 실패(failing fast) — global configs 참조. 색상 로그 활성·비활성화 — global configs 참조.

--empty 플래그

run 명령어는 스키마 전용 드라이런(dry run)을 위해 --empty 플래그를 지원해요. --empty 플래그는 refs와 sources를 0행으로 제한해요. dbt는 여전히 target 데이터 웨어하우스에 대해 모델 SQL을 실행하지만 입력 데이터의 값비싼 읽기는 피해요. 이는 의존성을 검증하고 모델이 제대로 빌드되도록 보장해요.

상태 코드

list_runs api를 호출하면 반환된 각 실행에 대한 상태 코드를 받아요. 사용 가능한 실행 상태 코드는 다음과 같아요:

  • Queued = 1
  • Starting = 2
  • Running = 3
  • Success = 10
  • Error = 20
  • Canceled = 30
  • Skipped = 40

더 알아보기 (Learn more)