execute_hooks_on_any_reuse
execute_hooks_on_any_reuse
execute_hooks_on_any_reuse는 dbt State가 노드를 재빌드 없이 재사용할 때 pre-/post-hook을 실행할지를 정하는 설정이에요. 기본적으로 재사용된 노드는 훅이 실행되지 않는데, 매 작업 호출마다 반드시 실행돼야 하는 감사(audit) 훅이 있다면 이 설정을 켜요.
출처: 문서
본문
models:
<resource-path>:
+state:
execute_hooks_on_any_reuse: true | false
models:
- name: my_model
config:
state:
execute_hooks_on_any_reuse: true | false
{{ config(
state={
"execute_hooks_on_any_reuse": true | false
}
) }}
정의 (Definition)
dbt State가 노드를 아직 신선하다고 판단해 건너뛰면, 기본적으로 그 노드의 pre-/post-hook은 실행되지 않아요. 이는 dbt의 표준 동작과 일치해요. 노드가 실행되지 않았으니 훅도 실행되지 않는 거죠.
매 작업 호출마다 반드시 실행돼야 하는 감사 훅이나 다른 훅이 있다면 execute_hooks_on_any_reuse: true 를 설정해요. 그러면 노드가 재빌드됐든 재사용됐든 훅이 실행돼요.
| 값 | 동작 |
|---|---|
| false (기본값) | 노드가 재빌드 없이 재사용되면 훅이 건너뛰어져요. |
| true | 노드가 재사용되어도 훅이 실행돼요. |
dbt State가 다른 환경에서 노드를 **복제(clone)**할 때는 복제 단계가 웨어하우스에 새 객체를 만들기 때문에 훅이 항상 실행돼요.
예시 (Example)
감사 훅을 항상 실행하기
매 작업 호출마다 실행돼야 하는 감사 또는 계보(lineage) 훅이 있는 노드에 execute_hooks_on_any_reuse: true 를 사용해요:
models:
- name: fct_orders
config:
state:
execute_hooks_on_any_reuse: true
post-hook:
- "INSERT INTO audit_log VALUES ('{{ model.name }}', CURRENT_TIMESTAMP())"
관련 문서 (Related docs)
더 알아보기 (Learn more)
- dbt State 설정 — dbt State 설정 전체
- Hooks — pre-/post-hook 사용법