2017-10-18 12 views
1

dag 외부에서 execution_date 매개 변수는 어떻게 얻을 수 있습니까? 외부에서 실행 매개 변수를 얻을 수있는 솔루션이 있습니까dag에서 execution_date를 얻으려면 어떻게해야합니까 ?? 운영자의 외부?

execution_min = "{{execution_date.strftime('%M') }}" 

if execution_min == '00': 
    logging.info('**** ' + "YES, It's 00") 
    final_task = DummyOperator(
     task_id='task_y00', 
     ... 
     dag=dag 
    ) 
else: 
    logging.info('**** ' + "NOPE!!!") 
    final_task = DummyOperator(
     task_id='task_n00', 
     ... 
     dag=dag 
    ) 

나는 execution_date (특히 분)

동적으로 작업 스트림을 설정할 그러나 신사 템플릿 template_fields = ['execution_date']

작동하지 않습니다 연산자 (= DAG 자체에서) ???

답변

0

execution_min = "{{ execution_date }}" 다음에 strftime을 사용해보세요. 이중 중괄호 앞뒤에 공백이 있는지 확인하십시오.

업데이트 : Operator 이외의 언어로 사용하는 경우 작동하지 않으며 kwargs를 전달하면 사용할 수 있습니다. Airflow: pass {{ ds }} as param to PostgresOperator

+0

또한 ... '{{execution_date.strftime ('% M ')}}' 이 종류의 진자 템플릿은 연산자에서도 작동합니다. – robinhur

0

실행 날짜는 DagRun에만 적용됩니다. DagRun 정보는 DAG 정의 파일에서 사용할 수 없습니다 (연산자가 Jinja를 통해 런타임에 구문 분석되므로 연산자 필드에서 사용할 수 있습니다). DAG 정의 파일은 dag가 실행되지 않는 경우에도 스케줄러, 웹 서버 및 작업자가 자주 구문 분석합니다. 따라서 실제 DagRun 외부에는 실행 날짜와 같은 항목에 액세스 할 수 없습니다.

또한 런타임에 DAG 실행에 작업을 추가/삭제할 수있는 방법이 없습니다. 실행하기 전에 구조가 결정되는 동적 DAG를 가질 수는 있지만 (DAG 구조로 파일 구문 분석) DAG가 실행되는 동안 작업을 추가하거나 DAG를 결정할 수는 없습니다.