dbt clone 명령어

dbt clone 명령어

dbt clone 명령어는 지정된 상태(state)의 선택된 노드들을 대상 스키마로 클론해요. clone materialization을 사용하며, 데이터 플랫폼이 제로카피 클로닝을 지원하면 테이블 클론을, 그렇지 않으면 포인터 뷰를 만들어요.

출처: 문서

본문

dbt clone 명령어는 지정된 상태의 선택된 노드들을 대상(target) 스키마(들)로 클론해요. 이 명령어는 clone materialization을 사용해요:

  • 데이터 플랫폼이 테이블의 제로카피 클로닝을 지원하고(Snowflake, Databricks, BigQuery), 이 모델이 소스 환경에 테이블로 존재한다면, dbt는 대상 환경에 클론으로 생성해요.
  • 그렇지 않으면 dbt는 단순 포인터 뷰(select * from 소스 객체)를 만들어요.
  • 기본적으로 dbt clone은 현재 대상에 이미 존재하는 관계(relation)를 다시 만들지 않아요. 덮어쓰려면 --full-refresh 플래그를 사용하세요.
  • 개별 clone 문은 서로 독립적이므로, 실행 시간을 줄이려면 스레드 수를 더 높게 지정할 수 있어요.

clone 명령어는 다음에 유용해요:

  • 블루/그린(blue/green) 무중단 배포(제로카피 클로닝을 지원하는 데이터 웨어하우스에서)
  • 현재 프로덕션 상태를 개발 스키마(들)로 클로닝
  • dbt CI 작업에서 인크리멘탈 모델 처리(제로카피 클로닝을 지원하는 데이터 웨어하우스에서)
  • BI 도구의 다운스트림 의존성에서 코드 변경 테스트
# clone all of my models from specified state to my target schema(s)
dbt clone --state path/to/artifacts

# clone one_specific_model of my models from specified state to my target schema(s)
dbt clone --select "one_specific_model" --state path/to/artifacts

# clone all of my models from specified state to my target schema(s) and recreate all pre-existing relations in the current target
dbt clone --state path/to/artifacts --full-refresh

# clone all of my models from specified state to my target schema(s), running up to 50 clone statements in parallel
dbt clone --state path/to/artifacts --threads 50

dbt clone은 언제 deferral 대신 사용할까?

deferral과 달리 dbt clone은 데이터 웨어하우스에서 일부 컴퓨팅과 추가 객체 생성이 필요해요. 많은 경우 deferral이 dbt clone보다 더 저렴하고 단순한 대안이에요. 하지만 dbt clone은 deferral로는 어려운 추가 사용 사례를 커버해요.

예를 들어 dbt clone은 실제 데이터 웨어하우스 객체를 생성하므로, dbt 밖(예: BI 도구)의 다운스트림 의존성에서 코드 변경을 테스트할 수 있게 해줘요.

또 다른 예로, 제로카피 클로닝을 지원하는 웨어하우스에서는 수정한 인크리멘탈 모델을 dbt CI 작업의 첫 단계로 clone해서 비용이 큰 full-refresh 빌드를 방지할 수 있어요.

dbt에서 클로닝

dbt clone 명령어를 사용해 dbt에서 상태 간 노드를 클로닝할 수 있어요. Studio IDE와 dbt platform CLI에서 사용 가능하며, --defer 기능에 의존해요. dbt에서 defer에 대한 자세한 내용은 Using defer in dbt를 읽어보세요.

  • dbt platform CLI 사용 — dbt platform CLI의 dbt clone 명령어는 --defer 플래그를 자동으로 포함해요. 즉 추가 설정 없이 dbt clone 명령어를 사용할 수 있어요.
  • Studio IDE 사용 — Studio IDE에서 dbt clone 명령어를 사용하려면 실행 전에 다음 단계를 따라 하세요: Production 환경을 설정하고 성공적인 작업 실행을 만드세요. 명령 바(command bar) 오른쪽 아래의 스위치를 켜서 Defer to production을 활성화하세요. 명령 바 오른쪽 아래의 'Defer to production' 토글을 선택해 Studio IDE에서 defer를 활성화하세요. 명령 바에서 dbt clone 명령어를 실행하세요.

dbt clone을 쓸지 deferral을 쓸지에 대한 모범 사례는 이 Developer 블로그 게시물에서 자세히 확인할 수 있어요.

더 알아보기 (Learn more)