Snowflake 어댑터 동작 변경

Snowflake 어댑터 동작 변경 (Snowflake adapter behavior changes)

dbt-snowflake에 특화된 동작 변경 플래그들을 다뤄요. 동적 테이블의 transient 기본값과 Iceberg 테이블의 Snowflake 관리형 스토리지 동작을 제어하는 플래그를 설명해 드릴게요.

출처: 문서

본문

다음은 dbt-snowflake에 특화된 현재의 동작 변경 플래그 목록이에요:

Flag dbt-snowflake: Intro dbt-snowflake: Maturity Status
snowflake_default_transient_dynamic_tables 1.12.0 TBD Active
snowflake_managed_iceberg_default 1.12.0 TBD Active

snowflake_default_transient_dynamic_tables 플래그

dbt-snowflake v1.12부터 사용할 수 있어요. snowflake_default_transient_dynamic_tables 플래그는 모델 config가 transient 설정을 명시하지 않을 때 Snowflake 동적 테이블을 transient로 생성할지 제어해요.

  • false(기본값)로 설정: 동적 테이블은 특정 모델에 transient: true를 설정하지 않는 한 Fail-safe 기간이 있는 영구(permanent) 테이블로 생성돼요.
  • true로 설정: 모델 config에 transient가 지정되지 않으면 동적 테이블이 transient(no Fail-safe period)로 생성돼요. Transient 동적 테이블은 스토리지 비용을 줄일 수 있어요.

snowflake_default_transient_dynamic_tables 플래그는 dbt_project.yml의 flags 키 아래에 설정해요. 동적 테이블 모델의 transient 컨피그를 사용해 기본 설정을 덮어쓸 수 있어요.

snowflake_managed_iceberg_default 플래그

dbt v2

v2에서는 이 동작이 기본값이며 설정할 플래그가 없어요. external_volumeSNOWFLAKE_MANAGED가 기본값이고, 테이블이 Snowflake 관리형 스토리지를 사용할 때 dbt는 base_location을 생략해요.

dbt-snowflake v1.12부터 사용할 수 있어요. snowflake_managed_iceberg_default 플래그는 모델이 external_volume 없이 Iceberg 테이블에 table_format: iceberg를 설정할 때 dbt가 무엇을 하는지 제어해요.

Snowflake는 Snowflake 관리형 스토리지를 사용하는 Iceberg 테이블에 BASE_LOCATION을 거부하며 BASE_LOCATION property is not supported for Iceberg tables using Snowflake Managed Storage 오류를 반환해요. 이 플래그를 사용하면 카탈로그를 직접 구성하지 않아도 Snowflake Horizon이 수락하는 데이터 정의 언어(DDL)를 dbt가 생성할 수 있어요.

  • false(기본값)로 설정: dbt는 external_volume을 내보내지 않아요. Snowflake는 계정·데이터베이스·스키마 레벨에 설정된 기본 외부 볼륨에 폴백하며, dbt는 여전히 base_location을 생성해요.
  • true로 설정: dbt는 external_volume = 'SNOWFLAKE_MANAGED'를 내보내고 base_location을 생략해서 테이블이 Snowflake 관리형 스토리지를 사용하게 해요.

이 플래그는 계정·데이터베이스·스키마 레벨에 설정된 기본 외부 볼륨에 의존하는 프로젝트의 대상 스토리지를 바꾸지 않도록 기본값이 false예요.

이 플래그에 의존하지 않는 두 가지 경우가 있어요:

  • external_volumeSNOWFLAKE_MANAGED로 설정하면 dbt는 항상 base_location을 생략해요. dbt는 모델 config에서 먼저, 그다음 catalogs.yml의 카탈로그 정의에서 external_volume을 해석하므로 어느 곳에 설정해도 base_location이 생략돼요.
  • external_volume을 Amazon S3, Azure, Google Cloud Storage 같은 사용자 정의 볼륨으로 설정하면 dbt는 항상 external_volumebase_location을 모두 내보내요.

dbt_project.yml의 flags 키 아래에 플래그를 설정해요:

dbt_project.yml

flags:
  snowflake_managed_iceberg_default: true

더 알아보기 (Learn more)