modules 변수

modules 변수

Jinja 컨텍스트의 modules 변수는 데이터를 다루기 위해 지원되는 제한된 Python 모듈 세트만 담고 있는 사전 정의된 네임스페이스(namespace)예요. Jinja 안에서는 임의의 Python 모듈(예: os, requests, 또는 커스텀 서드파티 라이브러리)을 import하거나 접근할 수 없어요.

출처: 문서

본문

modules 네임스페이스를 수정하거나 확장할 수 있는 사용자 대상 설정은 없어요. 이 제한은 환경 전반에 걸쳐 일관된 동작, 보안, 이식성을 보장하는 데 도움이 돼요.

추가 Python 라이브러리의 기능이 필요하다면(지원되는 곳에서) Jinja 대신 Python model을 사용해요. Python 모델은 다른 실행 컨텍스트에서 실행되며 필요에 따라 외부 라이브러리를 import해서 쓸 수 있어요.

datetime

이 변수는 복잡한 날짜·시간 로직을 지원하는 Python datetime 모듈을 가리켜요.

date, datetime, time, timedelta, tzinfo 모듈 컨텍스트를 포함해요.

사용법

{% set now = modules.datetime.datetime.now() %}
{% set three_days_ago_iso = (now - modules.datetime.timedelta(3)).isoformat() %}

이 모듈은 매 Jinja 평가마다 현재 날짜와 시간을 반환해요. 실행 시작 시점의 날짜·시간은 run_started_at을 참고해요.

pytz

이 변수는 시간대 로직을 지원하는 Python pytz 모듈을 가리켜요.

사용법

{% set dt = modules.datetime.datetime(2002, 10, 27, 6, 0, 0) %}
{% set dt_local = modules.pytz.timezone('US/Eastern').localize(dt) %}
{{ dt_local }}

re

이 변수는 정규 표현식을 지원하는 Python re 모듈을 가리켜요.

사용법

{% set my_string = 's3://example/path' %}
{% set s3_path_pattern = 's3://[a-z0-9-_/]+' %}

{% set re = modules.re %}
{% set is_match = re.match(s3_path_pattern, my_string, re.IGNORECASE) %}
{% if not is_match %}
    {%- do exceptions.raise_compiler_error(
        my_string ~ ' is not a valid s3 path'
    ) -%}
{% endif %}

itertools

참고해요dbt-core==1.10.6부터 modules.itertools를 사용하면 deprecation 경고가 발생해요. 자세한 내용과 해결 방안은 ModulesItertoolsUsageDeprecation 문서를 참고하세요.

이 변수는 반복자(iterator, 루프·리스트 등)를 다루는 유용한 함수를 포함한 Python itertools 모듈을 가리켜요.

지원되는 함수는 다음과 같아요:

  • count
  • cycle
  • repeat
  • accumulate
  • chain
  • compress
  • islice
  • starmap
  • tee
  • zip_longest
  • product
  • permutations
  • combinations
  • combinations_with_replacement

사용법

{%- set A = [1, 2] -%}
{%- set B = ['x', 'y', 'z'] -%}
{%- set AB_cartesian = modules.itertools.product(A, B) -%}

{%- for item in AB_cartesian %}
  {{ item }}
{%- endfor -%}
  (1, 'x')
  (1, 'y')
  (1, 'z')
  (2, 'x')
  (2, 'y')
  (2, 'z')

더 알아보기 (Learn more)

  • modules로는 지원되는 모듈만 쓸 수 있어요. 그 외 기능은 Python model을 사용해요.
  • 관련 개념: run_started_at, deprecations.