check 설정

check 설정

dbt check는 프로젝트의 표준·거버넌스 규칙을 SQL 쿼리로 작성해서 지키는지 검증하는 기능이에요. check의 동작을 제어하는 설정을 프로젝트·속성·SQL 레벨에서 어떻게 지정하는지 살펴봐요.

출처: 문서

본문

관련 문서

  • Checks
  • Check properties
  • dbt check 명령어

사용 가능한 설정

  • 프로젝트 YAML 파일
  • 속성 YAML 파일
  • SQL config

dbt_project.yml

checks:
  <resource-path>:
    +severity: error | warn
    +enabled: true | false
    +selection_filter_on: column_name | [column_names] | none
    +tags: string | [string]
    +meta: {dictionary}

checks/_checks.yml

version: 2

checks:
  - name: check-name
    config:
      severity: error | warn
      enabled: true | false
      selection_filter_on: column_name | [column_names] | none
      tags: string | [string]
      meta: {dictionary}

checks/<check_name>.sql

{{ config(
    severity = "error" | "warn",
    enabled = true | false,
    selection_filter_on = "column_name" | ["column_names"] | "none",
    tags = ["string"],
    meta = {"key": "value"}
) }}

select ...
from {{ info_schema('models') }}
where ...

예시

다음 예시는 check를 설정하는 흔한 방법들을 보여줘요.

check 실패 시 경고(warn)

새 규칙을 점진적으로 도입할 때 severity: warn을 사용하면 돼요. 문제는 로그로 기록되지만 빌드는 실패하지 않아요.

checks/_public_models_have_owners.yml

checks:
  - name: public_models_have_owners
    config:
      severity: warn  # default is error

특정 컬럼으로 필터링

edges 테이블에는 unique_id 컬럼이 없어서, 이 테이블을 조회하는 check는 결과를 반환하지 않아요. --select를 사용할 때 dbt는 결과를 범위 좁히기 위해 unique_id 컬럼을 찾는데 없으면 선택자(selector)와 무관하게 check가 프로젝트 전체에 대해 실행돼요. selection_filter_on을 리소스 ID가 담긴 컬럼으로 설정하면 --select가 그 컬럼들을 기준으로 행 범위를 좁혀줘요. 예를 들어 multiple_sources_joined check는 child_unique_id로 집계하므로, 그 컬럼만 설정하면 돼요:

checks/_multiple_sources_joined.yml

checks:
  - name: multiple_sources_joined
    config:
      selection_filter_on: child_unique_id