schema
schema (커스텀 스키마)
schema 설정은 모델, 시드, 스냅샷, 저장된 쿼리(saved query), 테스트에 커스텀 스키마를 지정하는 설정이에요. dbt는 기본적으로 관계명을 {{ target.schema }}_{{ schema }} 형식으로 생성해요.
출처: dbt 공식 문서
본문
모델
프로젝트 YAML 파일(dbt_project.yml)에서, SQL 파일 설정에서, 또는 프로퍼티 YAML 파일에서 모델 그룹에 커스텀 스키마를 지정해요.
예를 들어 marketing 관련 모델 그룹을 marketing이라는 별도 스키마에 두고 싶다면 이렇게 설정해요.
dbt_project.yml
models:
your_project:
marketing: # Grouping or folder for set of models
+schema: marketing
개별 모델의 스키마는 프로퍼티 파일에서도 설정할 수 있어요.
models/properties.yml
models:
- name: my_model
config:
schema: marketing
이렇게 하면 이 모델들의 생성된 관계가 marketing 스키마에 위치해서, 전체 관계명이 analytics.target_schema_marketing.model_name이 돼요. 관계의 스키마가 {{ target.schema }}_{{ schema }}이기 때문이에요. 정의 섹션에서 더 자세히 설명해요.
시드
dbt_project.yml 파일에서 커스텀 스키마를 설정해요.
예를 들어 mappings라는 별도 스키마에 둘 시드가 있다면 이렇게 설정해요.
dbt_project.yml
seeds:
your_project:
product_mappings:
+schema: mappings
이렇게 하면 생성된 관계가 mappings 스키마에 위치해서, 전체 관계명이 analytics.mappings.seed_name이 돼요.
스냅샷
(dbt v1.9 이상에 적용돼요.)
dbt_project.yml이나 프로퍼티 파일에서 스냅샷에 커스텀 스키마를 지정해요.
예를 들어 대상 스키마가 아닌 다른 스키마로 로드할 스냅샷이 있다면 이렇게 설정해요.
dbt_project.yml 파일에서:
dbt_project.yml
snapshots:
your_project:
your_snapshot:
+schema: snapshots
snapshots/snapshot_name.yml 파일에서:
snapshots/snapshot_name.yml
snapshots:
- name: snapshot_name
config:
schema: snapshots
이렇게 하면 생성된 관계가 snapshots 스키마에 위치해서 기본 대상 스키마 대신 전체 관계명이 analytics.snapshots.your_snapshot이 돼요.
저장된 쿼리 (Saved queries)
dbt_project.yml이나 프로퍼티 파일에서 saved query에 커스텀 스키마를 지정해요.
dbt_project.yml
saved-queries:
+schema: metrics
이렇게 하면 저장된 쿼리가 metrics 스키마에 저장돼요.
테스트
dbt_project.yml 파일에서 테스트 결과를 저장할 커스텀 스키마를 설정해요.
예를 들어 테스트 결과를 특정 스키마에 저장하려면 이렇게 설정해요.
dbt_project.yml
data_tests:
+store_failures: true
+schema: test_results
이렇게 하면 테스트 결과가 test_results 스키마에 저장돼요.
사용법에서 더 많은 예시를 참고해요.
정의
모델, 시드, 스냅샷, saved query, 테스트에 선택적으로 커스텀 스키마를 지정해요.
dbt v1.8 이하 사용자는 스냅샷에 커스텀 스키마를 지정할 때 target_schema 설정을 사용해요.
dbt가 데이터베이스에 관계(테이블/뷰)를 만들 때 {{ database }}.{{ schema }}.{{ identifier }}, 즉 analytics.finance.payments 형태로 만들어요.
dbt의 표준 동작은 다음과 같아요.
- 커스텀 스키마가 지정되지 않으면 관계의 스키마는 대상 스키마(
{{ target.schema }})예요. - 커스텀 스키마가 지정되면 기본적으로 관계의 스키마는
{{ target.schema }}_{{ schema }}예요.
dbt가 관계의 schema를 생성하는 방식을 바꾸는 방법을 더 알아보려면 커스텀 스키마 사용하기를 읽어보세요.
사용법
모델
dbt_project.yml 파일에서 모델 그룹을 설정해요.
dbt_project.yml
models:
jaffle_shop: # the name of a project
marketing:
+schema: marketing
config 블록으로 개별 모델을 설정해요.
models/my_model.sql
{{ config(
schema='marketing'
) }}
또는 프로퍼티 파일에서 개별 모델을 설정해요.
models/properties.yml
models:
- name: my_model
config:
schema: marketing
시드
dbt_project.yml
seeds:
+schema: mappings
데이터 테스트
실패를 저장하도록 설정된 테스트가 결과를 저장할 스키마의 이름을 커스터마이즈해요. 결과 스키마는 {{ profile.schema }}_{{ tests.schema }}이고, 기본 접미사는 dbt_test__audit예요. 프로파일 스키마를 그대로 쓰려면 +schema: null로 설정해요.
dbt_project.yml
data_tests:
+store_failures: true
+schema: _sad_test_failures # Will write tables to my_database.my_schema__sad_test_failures
작업에 필요한 스키마를 만들거나 접근할 권한이 있는지 확인하세요. 필요한 스키마에 올바른 권한이 있도록 각 데이터 플랫폼 환경에서 SQL 문을 실행하세요. 예를 들어 Redshift를 쓰면 다음 명령을 실행해요(정확한 인증 쿼리는 데이터 플랫폼마다 다를 수 있어요).
create schema if not exists dev_username_dbt_test__audit authorization username;
dev_username을 여러분의 개발 스키마 이름으로, username을 권한이 있어야 할 적절한 사용자로 바꾸세요.
이 명령은 store_failures 설정과 함께 자주 쓰이는 dbt_test__audit 스키마를 만들고 접근할 권한을 부여해요.
웨어하우스별 정보
- BigQuery:
dataset과schema는 서로 바꿔 쓸 수 있어요.
더 알아보기 (Learn more)
- 커스텀 스키마 사용하기 — dbt가 스키마를 생성하는 방식 변경
- store_failures — 테스트 실패 저장 설정
- target_schema — 스냅샷 커스텀 스키마(구버전)