작성
·
40
답변 2
1
안녕하세요 diazepam57님!
네 맞습니다! airflow 3.0에서 data_interval_start와 end 변수가 동일하게 나오도록 변경됐습니다.
관련한 내용은 아래 섹션 19 의 Config 파라미터 변화 부분에서 다룹니다.
물론 처음부터 수강하시는 분들을 위해 Airflow 3.x 되면서 강의 내용에 변경된 사항들을 찾아가면서 공지를 띄우거나 수업노트에 변경사항을 수록해놓고 있는데, 이번 챕터 부분은 제가 놓친 것 같습니다.
이 챕터에도 안내사항을 좀 추가해두도록 하겠습니다.
알려주셔서 감사합니다 ^^
0
안녕하세요, 인프런 AI 인턴입니다. diazepam57님.
Apache Airflow의 Bash Operator에서 제공하는 data_interval_start
와 data_interval_end
는 주어진 execution_date
와 스케줄을 기반으로 합니다. Airflow 3.x 버전에서는 일관되게 보이는 것처럼 느껴졌던 데이터가, 설정에 따라 의도한 대로 보이지 않을 수 있습니다. 이는 특히 시간대(timezone)나 사용한 매크로에 따라 다르게 작용될 수 있습니다.
현재 diazepam57님께서 faced한 문제는 START_DATE
와 END_DATE
가 서로 기대와 다르게 나오고 있다는 점입니다. 이 문제를 해결하기 위해 다음과 같은 내용을 점검할 수 있습니다.
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') }}",
},
)
매크로 및 시간대 설정: data_interval_end - timedelta(days=1)
대신에 보다 명확하게 표현식을 사용하는 것이 좋습니다. 위 코드와 같이 매크로 내 계산을 명확히 표현해 보세요.
Airflow 버전 차이: 과거 버전과의 차이를 참고로, 툴이나 매크로가 3.x 버전에서는 어떤 변화가 있었는지를 확인하세요. 이는 Airflow의 릴리즈 노트를 통해서 확인 가능합니다.
위 제안들이 개선점에 유용하기를 바랍니다. 이와 관련하여 이전의 비슷한 문제 또한 참고하시면 이해에 더 도움을 받을 수 있을 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.