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: datasetschema는 서로 바꿔 쓸 수 있어요.

더 알아보기 (Learn more)