model 객체
model 객체
model은 현재 모델에 대한 dbt graph 객체(또는 노드)예요. 다음과 같이 사용할 수 있어요:
- 예를 들어 post-hook에서
config설정에 접근할 때 - 모델의 경로(path)에 접근할 때
출처: 문서
본문
예를 들면:
{% if model.config.materialized == 'view' %}
{{ log(model.name ~ " is a view.", info=True) }}
{% endif %}
특정 모델의 model 내용을 보려면:
커맨드 라인 인터페이스(CLI)
CLI를 사용한다면 log()로 전체 내용을 출력해요:
{{ log(model, info=True) }}
Studio IDE
Studio IDE를 사용한다면 다음을 컴파일해 전체 내용을 출력해요:
{{ model | tojson(indent = 4) }}
microbatch 모델의 배치 속성
dbt v1.9부터 model 객체는 batch 속성(model.batch)을 포함해요. 이 속성은 incremental microbatch 모델을 실행할 때 현재 배치에 대한 세부 정보를 제공해요. 이 속성은 microbatch 모델의 배치 실행 중에만 채워져요.
다음 표는 batch 객체의 속성을 설명해요. dbt가 model과 batch 객체 양쪽에 이 속성을 추가한다는 점을 기억하세요.
| Property | Description | Example |
|---|---|---|
id |
microbatch 모델 컨텍스트 안에서 배치의 고유 식별자. | model.batch.id |
event_time_start |
배치의 event_time 필터 시작 시각(포함). |
model.batch.event_time_start |
event_time_end |
배치의 event_time 필터 종료 시각(미포함). |
model.batch.event_time_end |
사용 시 주의사항
model.batch는 microbatch 모델 배치 실행 중에만 사용할 수 있어요. microbatch 실행 밖에서는 model.batch는 None이고, 그 하위 속성에도 접근할 수 없어요.
batch 속성에 안전하게 접근하는 예
model.batch의 속성에 접근하기 전에 항상 model.batch가 채워졌는지 확인하는 걸 권장해요. 이렇게 하려면 if 문으로 안전하게 접근해요:
{% if model.batch %}
{{ log(model.batch.id) }} # Log the batch ID #
{{ log(model.batch.event_time_start) }} # Log the start time of the batch #
{{ log(model.batch.event_time_end) }} # Log the end time of the batch #
{% endif %}
이 예시에서 if model.batch 문은 배치 실행 중에만 코드가 실행되도록 보장해요. log()는 디버깅을 위해 batch 속성을 출력하는 데 쓰여요.
batch 세부 정보 로그 예
batch.id에 대한 배치 세부 정보를 기록하기 위해 microbatch 모델에서 model.batch를 사용하는 실용적인 예시예요:
{% if model.batch %}
{{ log("Processing batch with ID: " ~ model.batch.id, info=True) }}
{{ log("Batch event time range: " ~ model.batch.event_time_start ~ " to " ~ model.batch.event_time_end, info=True) }}
{% endif %}
이 예시에서 if model.batch 문은 배치 실행 중에만 코드가 실행되도록 보장해요. log()는 디버깅을 위해 batch 속성을 출력하는 데 쓰여요.
model 구조와 JSON 스키마
model의 구조와 정의를 보려면:
- dbt가 생성한 아티팩트를 설명·소비하기 위한 dbt JSON Schema를 참고해요
- Manifest 아래에서 해당 manifest 버전을 선택해요. 예를 들어 dbt v1.8을 쓴다면 Manifest v12를 선택하면 돼요
manifest.json버전 번호는 dbt 버전과 관련은 있지만(항상 같지는 않음) 그래서 dbt 버전에 맞는 올바른manifest.json버전을 반드시 사용해야 해요. 올바른manifest.json버전을 찾으려면 Manifest를 참고하고 상단 내비게이션에서 dbt 버전(예:v1.5)을 선택해요. 그러면 내 모델과 연결된 태그를 찾는 데 도움이 되요
- 그다음
nodes-> Additional properties 선택 ->CompiledModelNode또는 다른 정의/객체를 봐요
버전 패턴이 어떻게 동작하는지 이해하고 Manifest 버전을 dbt 버전과 맞추려면 다음 표를 사용해요:
| dbt version | Manifest version |
|---|---|
| dbt v2.0 | v12 |
| dbt v1.11 | v12 |
| dbt v1.10 | v12 |
| dbt v1.9 | v12 |
| dbt v1.8 | v12 |
| dbt v1.7 | v11 |
| dbt v1.6 | v10 |
| dbt v1.5 | v9 |
| dbt v1.4 | v8 |
| dbt v1.3 | v7 |