allow_clones
allow_clones
allow_clones는 dbt State가 대상 환경에 테이블을 clone해도 되는지를 제어하는 프로필 레벨 설정이에요. 기본값은 true예요.
출처: 문서
본문
profiles.yml:
my_project:
outputs:
prod:
type: snowflake
# ... other connection settings
allow_clones: true | false
target: dev
정의 (Definition)
allow_clones는 dbt State가 대상 환경에 테이블을 clone할 수 있는지 제어하는 프로필 레벨 설정이에요. 기본적으로 dbt State는 어떤 환경에서든 테이블을 clone할 수 있어요 — 데이터와 로직이 일치하면 dev 테이블을 prod로 clone하는 것도 포함해서요. 이 동작은 의도적이에요: dev에서 모델을 만들었고 아무것도 바뀌지 않았다면, prod로 clone하는 것은 재빌드하는 것보다 컴퓨팅을 아껴줘요.
대상의 allow_clones: false를 설정하면 dbt State는 clone 후보를 건너뛰고, 다른 대상에 일치하는 테이블이 있더라도 전체 빌드(full build)를 실행해요.
이 설정은 설정된 대상에만 영향을 줘요. 같은 프로필의 다른 대상은 영향을 받지 않아요.
dbt 플랫폼 사용자라면 환경 설정에서 확장 속성(extended attribute)으로 allow_clones를 추가해 설정할 수 있어요:
allow_clones: true | false
기본값 (Default)
true예요. 생략하면 clone이 활성화되어 dbt State는 일치하는 테이블이 있는 어느 환경에서든 clone해요.
비활성화하는 시기 (When to disable)
⚠️ 주의: allow_clones: false는 dbt State의 효율 이점을 줄여요. dbt State가 clone했을 노드를 대신 전체 빌드로 실행하게 돼요. 이 제한이 환경에 꼭 필요한지 고려하세요.
보통 allow_clones: false를 설정할 필요는 없어요. dbt State는 소스 테이블의 SQL 로직이 일치하고 테이블 데이터가 더 최신일 때만 clone해요. 이것은 테이블의 수정 날짜를 기반으로 하기 때문에(테이블 내용을 직접 비교하지 않음), dbt 밖에서 테이블을 수동 편집하면 실제로 전체 빌드가 만들 것과 일치하지 않으면서도 더 최신 수정 날짜를 가질 수 있어요. 항상 dbt를 통해 테이블 내용을 변경한다면 allow_clones를 활성화해 둬도 안전해요.
allow_clones를 비활성화하는 것은 규제 환경에서 유용해요. 그런 환경에서는 정확성과 무관하게 개발 스키마의 어떤 데이터도 프로덕션에 기록되는 것을 정책이 금지해요(예: 데이터 거버넌스나 감사 요구사항이 있어 프로덕션 테이블의 출처가 clone이 아니라 웨어하우스에서 실행된 SQL 문이어야 하는 환경).
관련 문서 (Related docs)
- About dbt State
- dbt State configs
더 알아보기 (Learn more)
- 리소스 설정 전체 목록은 Resource configurations 문서를 참고하세요.
allow_clones는 대상(target)별로 적용되는 프로필 레벨 설정이라는 점을 기억해 두세요.