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_namesconfig를 적용하면 오류가 나요. 새로 만드는 스냅샷에만 이 설정을 쓰거나, 컬럼 이름 변경을 반영하기 전에 기존 테이블을 갱신해 두는 것을 권장해요.
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
결과 스냅샷 테이블에는 설정한 메타 컬럼 이름이 사용돼요.