target_database

target_database

target_database는 dbt가 스냅샷 테이블을 만들 데이터베이스를 정하는 설정이에요. dbt v1.9+부터는 이 기능이 더 이상 사용되지 않아, generate_database_name 매크로를 존중하면서 커스텀 데이터베이스를 정의하려면 database config를 대안으로 사용하세요.

출처: 문서

본문

참고: dbt v1.9+부터 이 기능은 더 이상 사용되지 않아요. 커스텀 데이터베이스를 정의하면서 generate_database_name 매크로를 존중하려면 database config를 대안으로 사용하세요. dbt v1 Latest 릴리스 트랙에서 바로 써볼 수 있어요.

dbt_project.yml

snapshots:
  <resource-path>:
    +target_database: string

snapshots/.sql

{{ config(
  target_database="string"
) }}

Description

target_database는 dbt가 스냅샷 테이블을 만들 데이터베이스예요.

주의할 점:

  • 지정한 데이터베이스는 이미 존재해야 해요.
  • BigQuery에서는 이것이 project에 해당해요.
  • Redshift에서는 크로스 데이터베이스 쿼리가 불가능해요. 이 파라미터를 쓰면 다음 오류가 나와요. 그래서 Redshift에서는 이 파라미터를 쓰지 마세요.
Encountered an error:
Runtime Error
  Cross-db references not allowed in redshift (raw vs analytics)

Default

기본적으로 dbt는 프로필/연결에 연결된 대상 데이터베이스를 사용해요.

Examples

snapshots라는 데이터베이스에 모든 스냅샷 만들기

dbt_project.yml

snapshots:
  +target_database: snapshots

대상 인식 데이터베이스 사용하기

{{ target }} 변수를 사용해 스냅샷 테이블이 만들어질 데이터베이스를 바꿀 수 있어요.

참고: 다운스트림 ref가 스냅샷의 dev 버전을 선택하므로 스냅샷에 의존하는 모델을 검증하기 어려워질 수 있어요. 이 사용 사례가 자신에게 맞는지 고민해 보세요.

dbt_project.yml

snapshots:
  +target_database: "{% if target.name == 'dev' %}dev{% else %}{{ target.database }}{% endif %}"

모델과 같은 데이터베이스 명명 동작 사용하기

generate_database_name 매크로를 활용하면 모델과 같은 명명 동작을 따르는 데이터베이스에 스냅샷을 만들 수 있어요.

주의할 점:

  • 이 매크로는 dbt_project.yml 파일에서 설정할 수 없어서, 스냅샷 SQL 파일 config에서 설정해야 해요.
  • 다운스트림 ref가 스냅샷의 dev 버전을 선택하므로 스냅샷에 의존하는 모델을 검증하기 어려워질 수 있어요. 자신에게 맞는 사례인지 판단해 보세요.

snapshots/orders_snaphot.sql

{{
    config(
      target_database=generate_database_name('snapshots')
    )
}}

더 알아보기 (Learn more)