materialized

materialized (materialization)

materialized 설정은 dbt 모델을 웨어하우스에 어떤 방식으로 유지(persist)할지를 정하는 materialization 전략을 지정해요. dbt에 내장된 유형으로는 ephemeral, table, view, materialized_view, incremental이 있어요.

출처: dbt 공식 문서

본문

설정 방법

프로젝트 YAML 파일

dbt_project.yml

config-version: 2

models:
  <resource-path>:
    +materialized: <materialization_name>

프로퍼티 YAML 파일

models/properties.yml


models:
  - name: <model_name>
    config:
      materialized: <materialization_name>

SQL 파일 설정

models/<model_name>.sql

{{ config(
  materialized="<materialization_name>"
) }}

select ...

정의

Materializations은 dbt 모델을 웨어하우스에 유지하는 전략이에요. dbt에 내장된 materialization 유형은 다음과 같아요.

  • ephemeralephemeral 모델은 데이터베이스에 직접 빌드되지 않아요.
  • table — 모델은 매 실행마다 table로 다시 빌드돼요.
  • view — 모델은 매 실행마다 view로 다시 빌드돼요.
  • materialized_view — 대상 데이터베이스에 materialized views를 생성하고 유지할 수 있게 해요.
  • incrementalincremental 모델은 마지막 실행 이후 dbt가 table에 레코드를 삽입하거나 업데이트할 수 있게 해요.

dbt에서 custom materializations을 구성할 수도 있어요. 커스텀 materialization은 dbt의 기능을 특정 요구 사항에 맞게 확장하는 강력한 방법이에요.

생성 우선순위

Materialization은 다음 "드롭 스루(drop through)" 수명 주기를 따라 구현돼요.

  1. 제공된 경로에 모델이 존재하지 않으면 새 모델을 만들어요.
  2. 모델이 존재하지만 유형이 다르면 기존 모델을 드롭하고 새 모델을 만들어요.
  3. --full-refresh가 제공되면 설정 변경과 on_configuration_change 설정과 무관하게 기존 모델을 교체해요.
    • BigQuery 사용자는 모델의 materialization을 바꾼 뒤(예: table에서 view로) dbt가 기존 관계를 완전히 교체하고 변경이 완전히 적용되도록 dbt run 대신 dbt run --full-refresh를 실행해야 할 수 있어요.
  4. 설정 변경이 없으면 해당 유형의 기본 동작을 수행해요(예: materialized view에 대해 refresh 적용).
  5. on_configuration_change 설정에 따라 설정 변경을 적용할지 결정해요.

더 알아보기 (Learn more)