dbt_valid_to_current

dbt_valid_to_current

dbt_valid_to_current는 현재(최신) 스냅샷 레코드의 dbt_valid_to 값을 나타낼 커스텀 표시값(예: 미래 날짜)을 설정하는 옵션이에요. 기본값은 NULL인데, 이 설정을 쓰면 NULL 대신 지정한 값을 사용해요. 커스텀 날짜를 지정하거나 조인·범위 필터링을 하기 편리해지죠.

출처: 문서

본문

snapshots:
  - name: my_snapshot
    config:
      dbt_valid_to_current: "string"
{{
    config(
        unique_key='id',
        strategy='timestamp',
        updated_at='updated_at',
        dbt_valid_to_current='string'
    )
}}
snapshots:
  <resource-path>:
    +dbt_valid_to_current: "string"

dbt_valid_to_current 설정(dbt v1.9부터, 또는 dbt "v1 Latest" 릴리스 트랙에서 사용 가능)으로 현재 스냅샷 레코드의 dbt_valid_to 값에 대한 커스텀 표시값(예: 미래 날짜)을 정할 수 있어요. 기본적으로 이 값은 NULL이에요. 설정하면 dbt는 스냅샷 테이블의 현재 레코드에 대해 dbt_valid_toNULL 대신 지정한 값을 사용해요. 이 방식으로 커스텀 날짜를 지정하거나, 조인에서 활용하거나, 종료일이 필요한 범위 기반 필터링을 수행하기 쉬워져요.

고려사항 (Considerations)

  • 날짜 표현(작성): 데이터 플랫폼과 호환되는 하드코딩된 날짜 표현을 제공해요(예: to_date('9999-12-31')). 문법은 웨어하우스마다 다를 수 있어요(예: to_date('YYYY-MM-DD') 또는 date(YYYY, MM, DD)).
  • Jinja 제한: dbt_valid_to_current는 정적인 SQL 표현만 허용해요. {{ var('my_future_date') }} 같은 Jinja 표현은 지원되지 않아요.
  • Deferral 및 state:modified: dbt_valid_to_current의 변경은 deferral 및 --select state:modified 와 호환돼요. 이 설정이 바뀌면 state:modified 선택에 나타나며, 필요한 스냅샷 업데이트를 수동으로 하라는 경고를 띄워요.

기본값 (Default)

기본적으로 스냅샷 테이블의 현재(최신) 레코드에서는 dbt_valid_toNULL로 설정돼요. 이는 해당 레코드가 여전히 유효하고 정의된 종료일이 없다는 뜻이에요.

NULL 대신 현재 및 미래 레코드의 dbt_valid_to에 특정 값을 쓰고 싶다면 dbt_valid_to_current 설정 옵션을 사용할 수 있어요. 예를 들어 먼 미래의 날짜인 9999-12-31을 설정하는 식이에요. dbt_valid_to_current에 할당되는 값은 데이터베이스 요구사항에 따라 유효한 날짜 또는 타임스탬프를 나타내는 문자열이어야 해요. 데이터 플랫폼 안에서 동작하는 표현을 사용하세요.

스냅샷 레코드에 미치는 영향

dbt_valid_to_current를 설정하면 스냅샷 테이블의 dbt_valid_to 컬럼을 dbt가 관리하는 방식에 영향을 줘요:

  • 기존 레코드: 의도하지 않은 데이터 수정을 피하기 위해, dbt는 기존 dbt_valid_to 컬럼의 현재 값을 자동으로 조정하지 않아요. 기존의 현재 레코드는 여전히 dbt_valid_toNULL로 유지돼요.
  • 새 레코드: dbt_valid_to_current 설정을 적용한 후 삽입되는 새 레코드는 dbt_valid_toNULL 대신 지정된 값(예: '9999-12-31')으로 설정돼요.

즉, 스냅샷 테이블에는 현재 레코드의 dbt_valid_to 값이 (기존 데이터의) NULL과 (새 데이터의) 새로 지정한 값 두 가지로 섞여 있게 돼요. 현재 레코드에 대해 일관된 dbt_valid_to 값을 원한다면, 스냅샷 테이블에서 기존 레코드의 dbt_valid_to(NULL인 곳)를 dbt_valid_to_current 값과 일치하도록 수동으로 업데이트할 수 있어요.

예시 (Example)

snapshots:
  - name: my_snapshot
    config:
      strategy: timestamp
      updated_at: updated_at
      dbt_valid_to_current: "to_date('9999-12-31')"
    columns:
      - name: dbt_valid_from
        description: The timestamp when the record became valid.
      - name: dbt_valid_to
        description: >
          The timestamp when the record ceased to be valid. For current records,
          this is either `NULL` or the value specified in `dbt_valid_to_current`
          (like `'9999-12-31'`).

결과 스냅샷 테이블에는 설정한 dbt_valid_to 컬럼 값이 들어있어요.

더 알아보기 (Learn more)