dbt_project.yml

dbt_project.yml

dbt_project.yml 파일은 모든 dbt 프로젝트에 필수인 파일이에요. 여기에는 dbt가 프로젝트를 어떻게 운영할지 알려주는 중요한 정보가 들어 있어요.

모든 dbt 프로젝트에는 dbt_project.yml 파일이 필요해요. 바로 이 파일 덕분에 dbt가 디렉터리를 dbt 프로젝트로 인식해요. 또 프로젝트를 운영하는 데 필요한 중요한 정보도 담고 있어요. 동작 방식은 다음과 같아요:

  • dbt는 여러 곳에서 YAML을 사용해요. YAML이 처음이라면 배열, 사전, 문자열이 어떻게 표현되는지 배워두는 게 좋아요.

  • 기본적으로 dbt는 현재 작업 디렉터리와 그 상위 디렉터리에서 dbt_project.yml을 찾지만, --project-dir 플래그나 (앱: dbt v1.11 이상) DBT_ENGINE_PROJECT_DIR 환경 변수로 다른 디렉터리를 설정할 수 있어요.

  • dbt_project.yml 파일에서 project-id를 사용해 dbt-cloud 설정 아래 dbt 프로젝트 ID를 지정해요. dbt 프로젝트 URL에서 프로젝트 ID를 찾아요: 예를 들어 https://YOUR_ACCESS_URL/develop/projects/123456에서 프로젝트 ID는 123456이에요.

  • 참고로, dbt_project.yml 파일에는 설정(config)이 아닌 "속성(property)"은 설정할 수 없어요(예: macros). 이는 모든 유형의 리소스에 적용돼요. 자세한 내용은 Configs and properties를 참고해요.

출처: 문서

본문

예시

다음 예시는 dbt_project.yml 파일에서 사용할 수 있는 모든 설정의 목록이에요:

dbt_project.yml

name: string

config-version: 2
version: version

profile: profilename

model-paths: [directorypath]
seed-paths: [directorypath]
test-paths: [directorypath]
analysis-paths: [directorypath]
macro-paths: [directorypath]
snapshot-paths: [directorypath]
docs-paths: [directorypath]
asset-paths: [directorypath]
function-paths: [directorypath]
osi-paths: [directorypath]
check-paths: [directorypath]
skill-paths: [directorypath]

packages-install-path: directorypath

clean-targets: [directorypath]

query-comment: string

require-dbt-version: version-range | [version-range]

flags:
  <global-configs>

dbt-cloud:
  project-id: project_id # Required
  defer-env-id: environment_id # Optional
  account_id: account_id # Optional, v2 only; note the underscore, unlike the other dbt-cloud fields
  account-host: account-host # Defaults to 'cloud.getdbt.com'; Required if use a different Access URL

analyses: # Requires the require_corrected_analysis_fqns flag; available starting v1.12
  <analysis-configs>

exposures:
  +enabled: true | false

quoting:
  database: true | false
  schema: true | false
  identifier: true | false
  snowflake_ignore_case: true | false  # v2-only config. Aligns with Snowflake's session parameter QUOTED_IDENTIFIERS_IGNORE_CASE behavior. 
                                       # Ignored by dbt v1 and other adapters.
metrics:
  <metric-configs>

models:
  <model-configs>

seeds:
  <seed-configs>

semantic-models:
  <semantic-model-configs>

saved-queries:
  <saved-queries-configs>

skills:
  <skill-configs>

snapshots:
  <snapshot-configs>

sources:
  <source-configs>
  
checks:
  <check-configs>

data_tests:
  <test-configs>

info_schema:
  version: 1  # Pins which version of the dbt Information Schema the {{ info_schema() }} macro resolves to

vars:
  <variables>

on-run-start: sql-statement | [sql-statement]
on-run-end: sql-statement | [sql-statement]

dispatch:
  - macro_namespace: packagename
    search_order: [packagename]

restrict-access: true | false

functions:
  <function-configs>

+ 접두사

dbt는 폴더 이름과 설정을 + 접두사를 붙여 구분해요. + 접두사는 설정(config)에 사용하며 dbt_project.yml에서 해당 리소스 키 아래 적용돼요. 다음에는 적용되지 않아요:

  • 리소스 파일 안의 config() Jinja 매크로
  • .yml 파일의 config 속성

자세한 내용은 Using the + prefix를 참고해요.

명명 규칙

dbt_project.yml 파일의 설정에 올바른 YAML 명명 규칙을 따르는 게 중요해요. 그래야 dbt가 제대로 처리할 수 있거든요. 특히 단어가 두 개 이상인 리소스 타입에서 중요해요.

  • dbt_project.yml 파일에서 여러 단어의 리소스 타입을 구성할 때는 대시(-)를 사용해요. saved queries의 예시는 다음과 같아요:

    dbt_project.yml

    saved-queries:  # Use dashes for resource types in the dbt_project.yml file.
      my_saved_query:
        +cache:
          enabled: true
    
  • dbt_project.yml 파일이 아닌 YAML 파일에서 여러 단어의 리소스 타입을 구성할 때는 밑줄(_)을 사용해요. 예를 들어 semantic_models.yml 파일의 같은 saved queries 리소스는 다음과 같아요:

    models/semantic_models.yml

    saved_queries:  # Use underscores everywhere outside the dbt_project.yml file.
      - name: saved_query_name
        ... # Rest of the saved queries configuration.
        config:
          cache:
            enabled: true
    

더 알아보기 (Learn more)

  • dbt_project.yml은 프로젝트 전역 설정(경로, vars, on-run 훅, 모델 설정 등)을 담는 필수 파일이에요.
  • 관련 개념: dbt_cloud.yml, configs and properties.