snapshot_meta_column_names

snapshot_meta_column_names

조직의 명명 규칙에 맞추기 위해, 각 스냅샷 안의 메타데이터 컬럼 이름을 바꾸고 싶을 때 쓰는 설정이에요. Type 2 slowly changing dimension(SCD) 레코드로 변경 이력을 추적할 때 dbt가 기본으로 쓰는 컬럼 이름들을 이 config로 커스터마이즈할 수 있어요.

출처: 문서

본문

알아두세요: dbt v1.9부터 또는 dbt "v1 Latest" 릴리스 트랙에서 사용할 수 있어요.

snapshots/schema.yml

snapshots:
  - name: <snapshot_name>
    config:
      snapshot_meta_column_names:
        dbt_valid_from: <string>
        dbt_valid_to: <string>
        dbt_scd_id: <string>
        dbt_updated_at: <string>
        dbt_is_deleted: <string>

snapshots/.sql

{{
    config(
      snapshot_meta_column_names={
        "dbt_valid_from": "<string>",
        "dbt_valid_to": "<string>",
        "dbt_scd_id": "<string>",
        "dbt_updated_at": "<string>",
        "dbt_is_deleted": "<string>",
      }
    )
}}

dbt_project.yml

snapshots:
  <resource-path>:
    +snapshot_meta_column_names:
      dbt_valid_from: <string>
      dbt_valid_to: <string>
      dbt_scd_id: <string>
      dbt_updated_at: <string>
      dbt_is_deleted: <string>

Description

조직의 명명 규칙에 맞추기 위해 snapshot_meta_column_names config로 각 스냅샷의 메타데이터 컬럼 이름을 바꿀 수 있어요.

Default

기본적으로 dbt 스냅샷은 Type 2 SCD 레코드를 사용해 변경 이력을 추적할 때 다음 컬럼 이름을 사용해요.

이 컬럼 이름들은 모두 snapshot_meta_column_names config로 커스터마이즈할 수 있어요. 자세한 내용은 Example을 참고하세요.

경고: 의도하지 않은 데이터 수정을 막기 위해 dbt는 어떤 컬럼 이름 변경도 자동으로 적용하지 않아요. 그래서 기존 테이블을 갱신하지 않고 스냅샷에 snapshot_meta_column_names config를 적용하면 오류가 나요. 새로 만드는 스냅샷에만 이 설정을 쓰거나, 컬럼 이름 변경을 반영하기 전에 기존 테이블을 갱신해 두는 것을 권장해요.

dbt_scd_id 계산 방식

dbt_scd_id는 스냅샷의 각 행에 대해 생성되는 고유 식별자예요. dbt는 이 식별자로 소스 레코드의 변경을 감지하고, SCD 스냅샷에서 버전 관리를 해요.

dbt의 스냅샷 매크로는 dbt-adapters 리포지토리에서 dbt_scd_id를 처리해요.

해시는 스냅샷의 unique_key 값과, timestamp 전략이면 updated_at 타임스탬프를(또는 check 전략이면 check_cols의 값들을) 이어 붙인 다음, 그 결과 문자열을 md5 함수로 해싱해서 계산되요. 덕분에 dbt는 실행 사이에 행 내용이 바뀌었는지 추적할 수 있어요.

여러 필드를 하나의 문자열로 합친 뒤 md5로 해싱하는 커스텀 해시 계산 예시예요.

md5(
 coalesce(cast(unique_key1 as string), '') || '|' ||
 coalesce(cast(unique_key2 as string), '') || '|' ||
 coalesce(cast(updated_at as string), '')
)

해시에 포함되는 정확한 필드는 스냅샷 전략에 따라 달라요.

  • timestamp 전략: 보통 unique_key 컬럼과 updated_at 값을 조합해요.
  • check 전략: unique_key 컬럼과 check_cols에 나열된 컬럼 값들을 조합해요.

md5를 쓰고 싶지 않다면 디스패치된 매크로를 커스터마이즈할 수 있어요.

Example

snapshots/schema.yml

snapshots:
  - name: orders_snapshot
    relation: ref("orders")
    config:
      unique_key: id
      strategy: check
      check_cols: all
      hard_deletes: new_record
      snapshot_meta_column_names:
        dbt_valid_from: start_date
        dbt_valid_to: end_date
        dbt_scd_id: scd_id
        dbt_updated_at: modified_date
        dbt_is_deleted: is_deleted

결과 스냅샷 테이블에는 설정한 메타 컬럼 이름이 사용돼요.

더 알아보기 (Learn more)