소스 구성

소스 구성 (Source configurations)

소스 구성은 .yml 정의의 config: 블록 또는 dbt_project.yml 파일의 sources: 키 아래에서 할 수 있어요. 이 구성은 패키지에서 가져온 소스를 구성할 때 가장 유용해요.

출처: 문서

본문

Available configurations

(dbt v1.9 이상 적용) 소스 구성은 enabled, event_time, meta를 지원해요.

General configurations

일반 구성은 여러 리소스 타입에 적용되는 더 폭넓은 운영 설정을 제공해요. 리소스 전용 구성과 마찬가지로 프로젝트 파일, 속성 파일, 또는 리소스 전용 파일에서 설정할 수 있어요. dbt_project.yml (dbt v1.9 이상 적용)

sources:
  <resource-path>:
    +enabled: true | false
    +event_time: my_time_field
    +freshness:
      warn_after:  
        count: <positive_integer>
        period: minute | hour | day
    +meta:
      key: value

models/properties.yml (dbt v1.9 이상 적용)

sources:
  - name: [<source-name>]
    database: <database-name>
    schema: <schema-name>
    config:
      enabled: true | false
      event_time: my_time_field
      meta: {<dictionary>}
      freshness:
        warn_after:  
          count: <positive_integer>
          period: minute | hour | day
    tables:
      - name: [<source-table-name>]
        config:
          enabled: true | false
          event_time: my_time_field
          meta: {<dictionary>}

Configuring sources

소스는 .yml 정의의 config: 블록 또는 dbt_project.yml 파일의 sources: 키 아래에서 구성할 수 있어요. 이 구성은 패키지에서 가져온 소스를 구성할 때 가장 유용해요. 패키지에서 가져온 소스를 비활성화해서 문서에 렌더링되는 것을 막거나, 패키지에서 가져온 소스 테이블에서 소스 신선도 검사가 실행되는 것을 막을 수 있어요.

  • 참고: 하위 폴더의 속성 YAML 파일에 중첩된 소스 테이블을 비활성화하려면 프로젝트 YAML 파일(dbt_project.yml)에 해당 속성 YAML 파일의 경로(하위 폴더 포함)와 소스 이름, 테이블 이름을 모두 제공해야 해요. 다음 예시는 하위 폴더의 속성 YAML 파일에 중첩된 소스 테이블을 비활성화하는 방법이에요: dbt_project.yml (dbt v1.9 이상 적용)
sources:
  your_project_name:
    subdirectory_name:
      source_name:
        source_table_name:
          +enabled: false
          +event_time: my_time_field

Examples

다음 예시는 dbt 프로젝트에서 소스를 구성하는 방법을 보여줘요.

패키지에서 가져온 모든 소스 비활성화

패키지에서 가져온 모든 소스에 구성을 적용하려면 sources: 구성에서 리소스 경로의 일부로 프로젝트 이름 아래에 구성을 명시해요. dbt_project.yml

sources:
  events:
    +enabled: false

단일 소스 조건부 활성화

소스를 정의할 때 인라인 config 속성으로 전체 소스 또는 특정 소스 테이블을 비활성화할 수 있어요. databaseschema를 지정해 대상 데이터베이스와 스키마를 덮어쓸 수도 있어요: models/sources.yml

sources:
  - name: my_source
    database: raw
    schema: my_schema
    config:
      enabled: true
    tables:
      - name: my_source_table  # enabled
      - name: ignore_this_one  # not enabled
        config:
          enabled: false

특정 소스 테이블을 구성하고 그 구성의 입력으로 변수를 사용할 수 있어요: models/sources.yml

sources:
  - name: my_source
    tables:
      - name: my_source_table
        config:
          enabled: "{{ var('my_source_table_enabled', false) }}"

패키지에서 가져온 단일 소스 비활성화

다른 패키지의 특정 소스를 비활성화하려면 구성의 리소스 경로를 패키지 이름과 소스 이름 둘 다로 한정해요. 이 경우 events 패키지의 clickstream 소스를 비활성화하고 있어요. dbt_project.yml

sources:
  events:
    clickstream:
      +enabled: false

마찬가지로 리소스 경로를 패키지 이름, 소스 이름, 테이블 이름으로 한정해 소스의 특정 테이블을 비활성화할 수 있어요: dbt_project.yml

sources:
  events:
    clickstream:
      pageviews:
        +enabled: false

event_time으로 소스 구성

(dbt v1.9 이상 적용) event_time으로 소스를 구성하려면 소스 구성에 event_time 필드를 지정해요. 이 필드는 로딩 날짜 같은 것이 아니라 이벤트의 실제 타임스탬프를 나타내는 데 사용해요. 예를 들어 events 소스에 clickstream이라는 소스 테이블이 있다면 event_timestamp 컬럼의 각 이벤트 타임스탬프를 다음과 같이 사용할 수 있어요: dbt_project.yml

sources:
  events:
    clickstream:
      +event_time: event_timestamp

이 예시에서 event_timeevent_timestamp로 설정되며, 이는 각 clickstream 이벤트가 발생한 정확한 시간이에요. 이것은 인크리멘털 마이크로배칭 전략에 필요할 뿐 아니라, CI와 프로덕션 환경 간에 데이터를 비교할 때 dbt가 event_timestamp를 사용해 이벤트 기반 시간대별로 데이터를 필터링·매칭해서, 겹치는 시간대만 비교되도록 보장해요.

소스에 meta 구성

meta 필드를 사용해 소스에 메타데이터 정보를 할당해요. 추가 컨텍스트, 문서화, 로깅 등을 추적하는 데 유용해요. 예를 들어 clickstream 소스에 데이터 소스 시스템에 대한 정보를 담는 meta 정보를 추가할 수 있어요: dbt_project.yml

sources:
  events:
    clickstream:
      +meta:
        source_system: "Google analytics"
        data_owner: "marketing_team"

소스 신선도 구성

freshness 블록을 사용해 테이블이 새 데이터로 얼마나 자주 갱신될 것으로 기대하는지 정의하고, 그 기대가 충족되지 않을 때 경고와 에러를 발생시켜요. dbt는 신선도 검사가 실행될 때 현재 타임스탬프와, 컬럼·웨어하우스 메타데이터·커스텀 쿼리에서 계산한 가장 최근 갱신 타임스탬프를 비교해요. warn_aftererror_after 파라미터 중 하나 또는 둘 다 제공할 수 있어요. 둘 다 제공하지 않으면 dbt는 이 소스의 테이블에 대한 신선도 스냅샷을 계산하지 않아요. 자세한 내용은 freshness를 참고해 주세요. freshness 구성을 사용하는 dbt_project.yml 파일 예시를 볼게요: dbt_project.yml

sources:
  <resource-path>:
    +freshness:
      warn_after:
        count: 4
        period: hour

Example source configuration

다음은 다음 조건을 가진 프로젝트의 유효한 소스 구성이에요:

  • name: jaffle_shop
  • 여러 소스 테이블을 담은 events라는 패키지

dbt_project.yml

name: jaffle_shop
config-version: 2
...
sources:
  # project names
  jaffle_shop:
    +enabled: true
  events:
    # source names
    clickstream:
      # table names
      pageviews:
        +enabled: false
      link_clicks:
        +enabled: true

더 알아보기 (Learn more)