templates
  • parameters
  • jinja2
  • operator-keyword
  • airflow
  • 2017-10-18 195 views 1 likes 
    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定義文件也會被調度程序,Web服務器和工作人員頻繁分析。這就是爲什麼在實際的DagRun之外沒有訪問執行日期等事情的原因。

    此外,無法在運行時向DAG運行中添加/減少任務。您可以在運行之前決定其結構的動態dag(即將文件解析爲DAG結構),但無法添加任務或決定DAG在運行時的外觀。

    相關問題