selection_filter_on
selection_filter_on
dbt check나 dbt build에 셀렉터(--select, --exclude, --selector)를 넘기면, dbt는 그 셀렉터를 기준으로 각 체크가 평가할 프로젝트 리소스를 좁혀요. selection_filter_on은 바로 이때 체크가 반환한 출력에서 어느 컬럼이 셀렉션과 대조할 리소스 ID를 담고 있는지 dbt에 알려주는 설정이에요.
출처: 문서
본문
값
-
기본값(미설정): 쿼리가
unique_id를 반환하면, dbt는 셀렉션에 포함된unique_id를 가진 행만 유지해요. 쿼리가unique_id를 반환하지 않으면 체크는 프로젝트 전체에 대해 실행돼요. "프로젝트에 모델이 하나 이상 있다" 같은 집계형 체크에 유용해요. -
none: 셀렉터를 무시하고 체크가 항상 프로젝트 전체에 대해 실행돼요. 프로젝트 전체 동작을 명시적으로 만들고 싶을 때 써요. -
컬럼 이름 또는 컬럼 이름 목록: 지정한 컬럼 중 어느 하나의 ID가 셀렉션에 있으면 dbt는 그 행을 유지해요. 이름이 지정된 각 컬럼은 결과에 반드시 존재해야 하며, 그렇지 않으면 체크가 오류를 냅니다. 리소스 간 관계(엣지)를 반환하는 체크에 유용해요.
언제 설정해야 하나
체크가 unique_id 컬럼을 반환한다면 이 설정을 따로 할 필요가 없어요.
체크가 unique_id가 아닌 다른 ID 컬럼을 가진 행을 반환할 때 selection_filter_on을 쓰세요. 셀렉터가 그 컬럼을 기준으로 행을 좁힐 수 있도록, 리소스 ID를 담고 있는 컬럼으로 지정해 주면 됩니다.
다음 체크는 edges 테이블을 조회하고 unique_id 대신 child_unique_id를 반환해서, selection_filter_on을 꼭 설정해야 해요:
checks/multiple_sources_joined.sql
select child_unique_id, count(*) as source_parents
from {{ info_schema('edges') }}
where parent_unique_id like 'source.%'
group by child_unique_id
having count(*) > 1
다음 방법 중 하나로 이 체크에 selection_filter_on을 설정해요.
- 프로젝트 YAML 파일
- Properties YAML 파일
- SQL 파일 config
dbt_project.yml
checks:
+selection_filter_on: child_unique_id
checks/_checks.yml
version: 2
checks:
- name: multiple_sources_joined
description: "Fails if any model reads directly from more than one source."
config:
selection_filter_on: child_unique_id
checks/multiple_sources_joined.sql
{{ config(
selection_filter_on = "child_unique_id"
) }}
더 알아보기 (Learn more)
- Checks — dbt의 체크 기능 개요.
- Check configurations — 체크에서 쓸 수 있는 다른 설정.
- Using selectors with checks — 체크에 셀렉터를 적용하는 방법.