inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Airflow 마스터 클래스

Bash Operator with macros

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

60

diazepam57

작성한 질문수 4

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에서 다루셨다면 미리 사과드립니다 .. )

python 데이터-엔지니어링 airflow

답변 2

1

김현진

안녕하세요 diazepam57님!

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

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

image.png

 

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

 

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

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

 

0

인프런 AI 인턴

안녕하세요, 인프런 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의 릴리즈 노트를 통해서 확인 가능합니다.

참고 자료

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

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

pykrx 회원제 전환으로 인한 실습 불가

0

113

2

수료증 발급

0

82

3

에러 발생 관련 질문드립니다.

0

83

2

vscode 작업화면에 오류가 발생하지 않습니다.

0

69

2

plugins 폴더 생성

0

74

2

WSL에서 git push 가 안되요 ㅠ

0

113

2

chatGPT&Airflow로 블로그 자동 포스팅하기 는 Deprecated 가 필요합니다.

0

66

2

github에 회원가입이 안되는데 원인이 뭔지 모르겠어요 ㅠ

0

731

2

설치중인데 venv를 꼭 써야할까요?

0

125

2

설치 버전 관련 질문입니다.

0

68

1

우분투 버전 다운받아야하는데 어떤걸로 설치해야할까요?

0

62

1

DAG 만들기 중 airflow 패키지 로드 에러

0

106

2

3.0에서도 수업노트가 성립하는지 확인 부탁드립니다!

0

95

3

task_id 사용법이 뭔가 바뀐 것 같습니다.

0

76

3

email operator 오류 관련

0

66

2

plugins 폴더 관련

0

99

2

bash operator 관련 문의입니다

0

78

3

스케쥴러 - DAG 파싱 부하 줄이는 과정 질문

0

79

2

Dags refresh 주기 관련 질문

0

124

2

wsl 관련 질문입니다.!

0

74

2

macOS에서 docker 설치

0

94

2

템플릿 변수에 대한 오류

0

61

2

custom_image 디렉토리 문의드립니다.

0

54

2

ETL 인터뷰 관련 문의

0

103

2