compute
compute
compute는 유닛 테스트를 데이터 플랫폼에서 돌릴지, 아니면 DuckDB로 로컬에서 돌릴지를 정하는 dbt v2 전용 설정이에요. 기본적으로 유닛 테스트는 데이터 플랫폼에 쿼리를 보내고 결과를 기다리는데, 이 설정을 쓰면 개발 중 더 빨리 피드백을 받을 수 있죠.
출처: 문서
본문
compute 설정은 dbt v2에서만 사용할 수 있어요. v1에서는 사용할 수 없고 무시되며, v2로 업그레이드하려면 Upgrade to v2 업그레이드 가이드를 참고하세요.
유닛 테스트에 compute: local 을 설정하는 것은 실험적 기능이에요. 사용하기 전에 DBT_ENGINE_EXPERIMENTAL_LOCAL_UNIT_TESTS 환경 변수를 true로 설정해야 해요:
export DBT_ENGINE_EXPERIMENTAL_LOCAL_UNIT_TESTS=true
이 변수를 설정하지 않으면 dbt는 그 변수를 이름으로 지목하는 잘못된 설정 오류(invalid configuration error)와 함께 실패해요.
기본적으로 각 유닛 테스트는 데이터 플랫폼에 쿼리를 보내고 결과를 기다려요. 이 방식은 테스트를 느리게 하고 웨어하우스 컴퓨팅을 소모할 수 있어요. compute: local 설정을 쓰면 유닛 테스트를 DuckDB로 로컬에서 실행해서 개발 중 더 빠른 피드백을 얻고, 웨어하우스 컴퓨팅 비용도 관리할 수 있어요.
unit_tests:
- name: unit_test_name
model: model_name
config:
compute: local | remote
unit_tests:
resource-path:
+compute: local | remote
정의 (Definition)
compute는 개별 테스트의 properties YAML 파일이나 프로젝트 YAML 파일(dbt_project.yml)에서 테스트 그룹에 대해 설정할 수 있어요. 사용할 수 있는 값은 다음과 같아요:
local: dbt가 실행되는 곳 어디에서든 DuckDB로 유닛 테스트를 실행해요. 데이터 플랫폼으로 아무것도 보내지 않으므로 테스트가 빠르게 끝나고 웨어하우스 컴퓨팅도 쓰지 않아요.remote(기본값): 유닛 테스트를 데이터 플랫폼으로 보내 다른 쿼리처럼 웨어하우스 컴퓨팅을 사용해 실행해요. 기본값이기 때문에, 프로젝트 레벨의+compute: local에서 해당 테스트를 제외하려 할 때만 명시적으로 설정하면 돼요.
로컬 실행은 Snowflake와 BigQuery에서 사용할 수 있어요. 오류 메시지에서 sidecar를 보게 될 수도 있는데, 이는 local과 같은 뜻이에요.
개별 유닛 테스트에 설정한 값이 프로젝트 레벨 설정을 덮어써요. 그래서 dbt_project.yml에 +compute: local을 설정하고 한 테스트에 compute: remote를 설정하면, 그 테스트만 데이터 플랫폼에서 실행되고 나머지는 로컬로 실행돼요.
프로젝트 파일에서:
unit_tests:
my_project:
+compute: local
그리고 단일 테스트에서:
unit_tests:
- name: test_revenue_calculation
model: fct_revenue
config:
compute: remote
로컬 실행에 대해 알아둘 점 (Things to know about local execution)
compute: local은 dbt가 실행되는 환경에DBT_ENGINE_EXPERIMENTAL_LOCAL_UNIT_TESTS=true가 설정되어 있지 않으면 거부돼요. 이는 개별 테스트에 설정하든dbt_project.yml에+compute: local로 설정하든 동일하게 적용돼요.- SQL은 DuckDB로 번역이 가능해야 해요. DuckDB에 대응하는 것이 없는 플랫폼 전용 함수는 실패하고,
local은 데이터 플랫폼으로 폴백하지 않아요. 번역 실패는 테스트 실패로 이어져요. - SQL을 번역하기 위해 dbt는 테스트를 처음 실행할 때 모델의 직접적인 업스트림 모델 스키마를 데이터 플랫폼에서 가져와 이후 실행에서 캐시해요. 그 업스트림 모델이 데이터 플랫폼에 이미 존재해야 해요.
compute: local을 설정하면 해당 테스트에 대해static_analysis가strict로 승격돼요. 로컬 실행이 SQL 번역을 위해 엄격한 분석을 필요로 하기 때문이에요. 테스트에static_analysis: off를 설정하면 로컬에서 실행할 수 없고 오류가 발생해요.
관련 문서 (Related docs)
더 알아보기 (Learn more)
- 유닛 테스트 — dbt 유닛 테스트 전반
- static_analysis — SQL 분석 수준 설정