강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

diazepam57님의 프로필 이미지
diazepam57

작성한 질문수

Airflow 마스터 클래스

Bash Operator with macros

27. Bash Operators with macros 질문 (START_DATE, END_DATE)

작성

·

40

0

airflow 3.* 를 기준으로 data_interval_start 나 data_interval_end 모두 같은 시간이 나와서 기존 gitHub 코드로 실습하니

Screenshot 2025-06-11 at 8.13.22 pm.pngScreenshot 2025-06-11 at 8.11.48 pm.png

기대했던 것과는 다른 log 결과가 반환 되었습니다.

이럴 경우 어떻게 코드를 수정해야 하는지 가르쳐주실 수 있을까요?
( 혹시 섹션 19에서 다루셨다면 미리 사과드립니다 .. )

답변 2

1

김현진님의 프로필 이미지
김현진
지식공유자

안녕하세요 diazepam57님!

네 맞습니다! airflow 3.0에서 data_interval_start와 end 변수가 동일하게 나오도록 변경됐습니다.

관련한 내용은 아래 섹션 19 의 Config 파라미터 변화 부분에서 다룹니다.

image.png

 

물론 처음부터 수강하시는 분들을 위해 Airflow 3.x 되면서 강의 내용에 변경된 사항들을 찾아가면서 공지를 띄우거나 수업노트에 변경사항을 수록해놓고 있는데, 이번 챕터 부분은 제가 놓친 것 같습니다.

 

이 챕터에도 안내사항을 좀 추가해두도록 하겠습니다.

알려주셔서 감사합니다 ^^

 

0

안녕하세요, 인프런 AI 인턴입니다. diazepam57님.

Apache Airflow의 Bash Operator에서 제공하는 data_interval_startdata_interval_end는 주어진 execution_date와 스케줄을 기반으로 합니다. Airflow 3.x 버전에서는 일관되게 보이는 것처럼 느껴졌던 데이터가, 설정에 따라 의도한 대로 보이지 않을 수 있습니다. 이는 특히 시간대(timezone)나 사용한 매크로에 따라 다르게 작용될 수 있습니다.

현재 diazepam57님께서 faced한 문제는 START_DATEEND_DATE가 서로 기대와 다르게 나오고 있다는 점입니다. 이 문제를 해결하기 위해 다음과 같은 내용을 점검할 수 있습니다.

해결 방법:

  1. Timezone 확인: Europe/Berlin이 제대로 설정됐는지 확인합니다. 이는 DAG 정의에서 default_args나 환경 변수 설정에서 조정될 수 있습니다.
from datetime import timedelta
from airflow import DAG
from airflow.operators.bash import BashOperator
from airflow.utils.dates import days_ago

default_args = {
    'owner': 'airflow',
    'depends_on_past': False,
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 1,
    'retry_delay': timedelta(minutes=5),
}

dag = DAG(
    'dags_bash_with_macros',
    default_args=default_args,
    description='A simple tutorial DAG',
    schedule_interval=timedelta(days=1),
    start_date=days_ago(2),
    tags=['example'],
    catchup=False,
)

t1 = BashOperator(
    task_id='bash_task_1',
    bash_command='echo {{ ts }}; echo {{ ts_end }}',
    dag=dag,
    env={
        'START_DATE': "{{ data_interval_start.in_timezone('Europe/Berlin') }}",
        'END_DATE': "{{ (data_interval_end - macros.timedelta(days=1)).in_timezone('Europe/Berlin') }}",
    },
)
  1. 매크로 및 시간대 설정: data_interval_end - timedelta(days=1) 대신에 보다 명확하게 표현식을 사용하는 것이 좋습니다. 위 코드와 같이 매크로 내 계산을 명확히 표현해 보세요.

  2. Airflow 버전 차이: 과거 버전과의 차이를 참고로, 툴이나 매크로가 3.x 버전에서는 어떤 변화가 있었는지를 확인하세요. 이는 Airflow의 릴리즈 노트를 통해서 확인 가능합니다.

참고 자료

위 제안들이 개선점에 유용하기를 바랍니다. 이와 관련하여 이전의 비슷한 문제 또한 참고하시면 이해에 더 도움을 받을 수 있을 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

diazepam57님의 프로필 이미지
diazepam57

작성한 질문수

질문하기