Configs와 Properties

Configs와 Properties

dbt에서 properties와 configurations의 차이를 이해해 보아요. properties는 리소스를 설명하고, configurations는 dbt가 그 리소스를 웨어하우스에서 어떻게 빌드할지를 제어해요. 프로젝트의 리소스(모델, 스냅샷, 시드, 테스트 등)는 여러 선언된 property를 가질 수 있고, 특별한 종류의 property인 configurations(configs)도 정의할 수 있어요. configs는 추가 능력을 가져다줘요.

출처: 문서

본문

그럼 둘의 차이는 무엇일까요?

  • Properties는 properties.yml 파일에서 리소스별로 하나씩 선언해요. Configs는 거기에서 config property 아래 중첩해서 정의할 수 있고, .sql 파일 안에서 config() 매크로로 하나씩 설정하거나, dbt_project.yml에서 여러 리소스에 한 번에 설정할 수도 있어요.
  • Configs는 여러 곳에서 설정할 수 있기 때문에 계층적으로 적용돼요. 개별 리소스는 다른 곳에서 설정된 config를 상속하거나 덮어쓸 수 있어요.
  • config: 선택 메서드를 사용해서 config 값에 기반해 리소스를 선택할 수 있지만, config가 아닌 property의 값으로는 선택할 수 없어요.
  • 파일 타입에 따라 properties와 configs의 명명 규칙(naming conventions)이 조금씩 달라요. 자세한 내용은 naming convention을 참고하세요.

요약하자면: properties는 프로젝트 리소스에 대해 뭔가를 선언하고, configs는 dbt가 그 리소스를 웨어하우스에서 어떻게 빌드할지 한 단계 더 알려줘요. 대체로 맞지만 항상 그런 건 아니니 확인해 보는 게 좋아요!

예를 들어 리소스 properties로 할 수 있는 일:

  • 모델, 스냅샷, 시드 파일과 그 컬럼을 설명하기
  • 데이터 테스트 형태로 모델에 대한 "진실"을 주장하기(예: "이 id 컬럼은 유니크하다")
  • exposure 형태로 데이터 모델의 공식적인 다운스트림 용도를 정의하고 exposure의 "type"을 주장하기

반면 configurations로 할 수 있는 일:

  • 모델의 머티리얼라이즈 방식을 바꾸기(table, view, incremental 등)
  • 시드가 데이터베이스에서 어디에 생성될지 선언하기(<database>.<schema>.<alias>)
  • 리소스가 그 설명(description)을 데이터베이스의 주석으로 유지할지 선언하기
  • 리소스에 tags와 meta를 적용하기

더 알아보기 (Learn more)