latest_version_pointer
latest_version_pointer (최신 버전 포인터)
latest_version_pointer는 버전이 있는 모델(versioned model)의 베이스 이름(예: dim_customers)으로 뷰를 만들어, 항상 최신 버전의 관계(예: dim_customers_v2)를 가리키게 하는 설정이에요. dbt v1.12 또는 dbt "v1 Latest" 릴리스 트랙에서 사용할 수 있어요.
출처: dbt 공식 문서
본문
설정 방법
프로젝트 파일
dbt_project.yml
models:
<resource-path>:
+latest_version_pointer:
enabled: true | false
alias: <string>
프로퍼티 파일
models/schema.yml
models:
- name: [<model-name>]
config:
latest_version_pointer:
enabled: true | false
alias: <string>
SQL 설정
models/<model_name>.sql
{{ config(
latest_version_pointer={
"enabled": true | false,
"alias": "<string>"
}
) }}
정의
dbt v2의 dbt 플랫폼
dbt v2에서는 latest_version_pointer가 모든 버전이 있는 모델에 기본적으로 활성화돼 있어요. 모델의 베이스 이름과 일치하는 명시적 alias를 가진 버전 모델이 있으면 dbt1005 충돌 오류가 생길 수 있어요. 해결 방법은 아래 명명 충돌 섹션을 참고해요.
latest_version_pointer 설정은 버전이 있는 모델의 베이스 이름(예: dim_customers)으로 된 뷰를 만들어 항상 최신 버전 관계(예: dim_customers_v2)를 가리키게 해요. 이 뷰는 is_latest_version = true인 모델이 성공적으로 materialize된 후에 생성되며, 다른 모든 버전에서는 건너뛰어요.
이 기능을 모든 버전 모델에 전역으로 활성화하려면 dbt_project.yml에서 latest_version_pointer_enabled_by_default 플래그를 true로 설정할 수도 있어요.
dbt_project.yml
flags:
latest_version_pointer_enabled_by_default: true
latest_version_pointer는 모델별 제어를 위한 두 개의 선택적 하위 키를 받아요.
| 키 | 타입 | 기본값 | 설명 |
|---|---|---|---|
enabled |
boolean | — | 이 모델에 대해 포인터 뷰를 활성화하거나 비활성화해요. 설정하면 latest_version_pointer_enabled_by_default 프로젝트 플래그를 덮어쓰고, 설정하지 않으면 그 플래그를 따릅니다. |
alias |
string | 모델 베이스 이름 | 포인터 뷰의 사용자 지정 이름이에요. 기본 베이스 이름을 덮어써요. 자세한 내용은 별칭 사용자 지정을 참고해요. |
별칭 사용자 지정
기본적으로 포인터 뷰는 모델의 베이스 이름(예: dim_customers)을 사용해요. 두 가지 방법으로 사용자 지정할 수 있어요.
- 모델별로: 모델 설정에서
latest_version_pointer.alias를 설정해요. - 전역으로: 프로젝트에서
generate_latest_version_pointer_alias매크로를 덮어써요. 이 매크로는generate_alias_name과 같은 패턴을 따라요.
명명 충돌
명명 충돌을 방지하기 위해 dbt는 최신 버전의 alias가 포인터 뷰 이름과 같으면 dbt1005 오류를 발생시켜요. latest_version_pointer가 기본 활성화된 dbt v2에서는, 포인터를 직접 설정한 적이 없어도 모델의 베이스 이름과 일치하는 명시적 alias가 있는 모델에서 이 오류가 표면화될 수 있어요.
예를 들어 다음 설정은 dim_customers_v2와 포인터 뷰가 둘 다 dim_customers로 해석되기 때문에 dbt1005를 발생시켜요.
dbt1005 (Cannot create latest version pointer: the latest version of 'dim_customers' is already aliased to 'dim_customers')
models:
- name: dim_customers
versions:
- v: 1
- v: 2
config:
alias: dim_customers # collides with the pointer view name
config:
latest_version_pointer:
enabled: true
이를 해결하려면 다음 옵션 중 하나를 선택해요.
alias 제거 (권장)
최신 버전에서 alias를 제거하고 자동 포인터가 처리하게 둬요.
config:
alias: dim_customers
해당 모델의 최신 버전 포인터 비활성화
이 방법은 기존 alias 설정에 즉시 하위 호환이 돼요.
config:
alias: dim_customers
config:
latest_version_pointer:
enabled: false
고유한 alias 설정
config:
alias: dim_customers_latest
generate_latest_version_pointer_alias 매크로 덮어쓰기
전역으로 다른 명명 규칙을 쓰려면 generate_latest_version_pointer_alias 매크로를 덮어써요.
macros/generate_latest_version_pointer_alias.sql
{% macro generate_latest_version_pointer_alias(custom_alias_name=none, node=none) -%}
{{ node.name ~ "_latest" }}
{%- endmacro %}
더 알아보기 (Learn more)
- 모델 버전 — versioned model의 개념
- 최신 버전 가리키기
latest_version_pointer_enabled_by_default플래그versionslatest_version