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())"

더 알아보기 (Learn more)