노출(Exposure)로 DAG의 소비처 정의하기

노출(Exposure)로 DAG의 소비처 정의하기

dbt로 만든 데이터가 결국 어디에 쓰이는지, DAG에 그 소비처까지 함께 표현하고 싶다면 **노출(exposure)**을 쓰면 돼요. 노출은 대시보드, 애플리케이션, 데이터 사이언스 파이프라인 같은 dbt 프로젝트의 다운스트림 사용처를 정의하고 설명할 수 있게 해 주는 개념이에요. 노출을 정의하면 그 노출로 이어지는 리소스를 실행·테스트·나열할 수 있고, 자동 생성되는 문서 사이트에 데이터 소비자에게 필요한 맥락을 담은 전용 페이지를 만들 수 있어요.

출처: dbt 공식 문서 — Add Exposures to your DAG

노출의 두 가지 방식

노출은 두 가지 방식으로 정의할 수 있어요.

노출 선언하기

노출은 .yml 파일의 exposures: 키 아래에 정의해요. models/<filename>.yml 파일에 노출을 선언한 예시를 볼게요.


exposures:

  - name: weekly_jaffle_metrics
    label: Jaffles by the Week
    type: dashboard
    maturity: high
    url: https://bi.tool/dashboards/1
    description: >
      Did someone say "exponential growth"?

    depends_on:
      - ref('fct_orders')
      - ref('dim_customers')
      - source('gsheets', 'goals')
      - metric('count_orders')

    owner:
      name: Callum McData
      email: [email protected]

사용할 수 있는 속성

필수(Required):

  • name: 스네이크 케이스로 작성한 고유한 노출 이름
  • type: dashboard, notebook, analysis, ml, application 중 하나 (문서 사이트에서 그룹짓는 데 사용)
  • owner: name 또는 email 중 하나는 필수이고, 추가 속성도 허용돼요

기대하는 속성(Expected):

  • depends_on: 참조할 수 있는 노드의 목록으로 metric, ref, source를 포함해요. 노출이 source에 직접 의존하게 만들 일은 거의 없어요.

여기서 주의할 점이 하나 있어요. 이 depends_on YAML 속성을, 모델 SQL 파일 맨 위에 정의하는 -- depends_on SQL 주석 지시문과 혼동하면 안 돼요. SQL 주석 지시문은 DAG에 의존성을 명시적으로 추가해 참조된 리소스가 모델보다 먼저 빌드되도록 보장하지만, 노출의 depends_on은 그런 용도가 아니에요.

선택(Optional):

  • label: 공백, 대문자, 특수문자가 들어갈 수 있어요.
  • url: 생성된 문서 사이트 오른쪽 위의 View this exposure 링크를 활성화하고 채워요.
  • maturity: 노출의 신뢰도나 안정성 수준을 나타내며 high, medium, low 중 하나예요. 이미 널리 쓰이고 신뢰받는 대시보드라면 high, 새롭거나 실험적인 분석이라면 low를 쓰는 식이에요.

일반 속성(선택):

노출 참조하기

노출을 정의하고 나면 그 노출을 참조하는 명령을 실행할 수 있어요.

dbt run -s +exposure:weekly_jaffle_report
dbt test -s +exposure:weekly_jaffle_report

문서 사이트를 생성하면 노출이 별도 섹션으로 나타나요. 프로젝트 이름 아래에 프로젝트의 각 노출을 나열하는 전용 섹션이 생기고, DAG에서도 노출은 주황색 EXP 표시가 있는 노드로 나타나죠.

더 알아보기