templates
  • parameters
  • jinja2
  • operator-keyword
  • airflow
  • 2017-10-18 203 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在运行时的外观。

    相关问题