+ 접두사 사용하기

+ 접두사 사용하기 (The + prefix)

+ 접두사는 dbt_project.yml 파일에서 리소스 경로(resource path)와 설정(config)의 차이를 명확히 구분해주는 dbt 문법 기능이에요. (dbt v2.0 이상에 적용돼요.)

출처: dbt 공식 문서

본문

+ 접두사는 dbt_project.yml 파일에서 리소스 경로와 설정을 구분하는 데 도움을 주는 dbt 문법 기능이에요.

  • config-version 1을 쓰는 dbt_project.yml 파일과는 호환되지 않아요.

  • 다음에는 적용되지 않아요.

    • 리소스 파일 안의 config() Jinja 매크로
    • .yml 파일 안의 config 프로퍼티

예를 들어:

dbt_project.yml

name: jaffle_shop
config-version: 2

...

models:
  +materialized: view
  jaffle_shop:
    marts:
      +materialized: table

이 문서 전반에 걸쳐 우리는 dbt_project.yml 파일에서 설정 키에 + 접두사를 사용해요.

config-version 2를 쓰는 프로젝트에서는 dbt가 설정 키에 + 접두사를 쓰길 기대해요. + 접두사 없이 설정을 지정하는 것은 비권장(deprecated)돼요. 리소스 설정 안의 폴더와 파일 이름은 여전히 + 접두사를 쓰지 않아요.

+ 접두사는 설정용으로 예약돼 있으므로, 리소스 경로의 폴더와 파일 이름은 +로 시작하면 안 돼요. dbt v2에서는 +로 시작하는 리소스 경로에 대해 경고를 발생시키고, require_resource_names_without_plus_prefix 동작 변경 플래그를 활성화하면 오류를 발생시켜요. +my_folder라는 폴더가 있다면 + 접두사를 제거하도록 이름을 바꿔요.

+ 접두사는 리소스 경로와 설정을 구분해야 할 때 특히 중요해요. 예를 들어:

  • 설정이 입력으로 딕셔너리를 받을 때, 예를 들어 persist_docs.
  • 설정이 리소스 경로의 일부와 키를 공유할 때, 예를 들어 tags라는 모델 디렉터리.

dbt는 dbt_project.yml에서 + 접두사 없이 설정을 지정하는 것을 비권장해요. dbt_project.yml의 리소스 설정 안에서는 폴더와 파일 이름만 + 접두사 없이 지정할 수 있어요.

이 비권장 경고는 다음 어댑터에 대해서만 발생해요.

  • Snowflake
  • Databricks
  • BigQuery
  • Redshift

dbt_project.yml

name: jaffle_shop
config-version: 2

...

models:
  +persist_docs: # this config is a dictionary, so needs a + prefix
    relation: true
    columns: true

  jaffle_shop:
    +schema: my_schema
    +tags: # this is the tags config
      - "hello"
    config:
      tags: # resource path (models/tags/), not the tags config
        # config: disambiguates path vs. config (required in v1.10+)
        # The below config applies to models in the models/tags/ directory.
        +materialized: view

참고: dbt_project.yml에서 + 접두사를 쓰는 것은 다른 설정에서 (clobber vs. add 방식으로) 설정 병합 동작을 제어하기 위해 +를 쓰는 것과는 구별돼요. 현재 +로 설정 병합 동작을 제어하는 것을 지원하는 유일한 설정은 grants예요.

더 알아보기 (Learn more)