target_database
target_database
target_database는 dbt가 스냅샷 테이블을 만들 데이터베이스를 정하는 설정이에요. dbt v1.9+부터는 이 기능이 더 이상 사용되지 않아, generate_database_name 매크로를 존중하면서 커스텀 데이터베이스를 정의하려면 database config를 대안으로 사용하세요.
출처: 문서
본문
참고: dbt v1.9+부터 이 기능은 더 이상 사용되지 않아요. 커스텀 데이터베이스를 정의하면서
generate_database_name매크로를 존중하려면databaseconfig를 대안으로 사용하세요. 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)
- database config —
generate_database_name을 존중하는 대안 설정. - generate_database_name — 데이터베이스 명명 매크로.