我可以使用默认值参数触发dag吗?

时间:2019-08-06 13:48:37

标签: airflow airflow-scheduler apache-airflow-xcom

我创建了计算昨天日期的dag,并将其用于所有dag的任务中。 有什么方法可以传递dag参数(在我的情况下是日期)并在所有操作员调用中使用它? (我不能更改操作员的代码,只能使用它),如果我的爸爸没有从外面得到任何日期-计算昨天的日期并在所有流程中使用它?

所以基本上我想问一下我们是否可以使用参数手动触发dag,以及dag是否没有任何参数来使用/计算默认值(在我的情况下是计算昨天的日期)

需要您的帮助:)


ag_args = {
    'owner': 'airflow',
    'start_date': airflow.utils.dates.days_ago(1),
    'email': ['lalala@example.com'],
    'email_on_failure': True,
    'email_on_retry': False,
    'email_on_success': True,
    'retries': 1,
}

dag = DAG(
    dag_id='example_dag',
    default_args=dag_args,
    schedule_interval=None
)

t1 = SimpleHttpOperator(
    task_id='check_if_daily_report_ready',
    method='GET',
    endpoint="/bla/bla?date={date}".format(
        date=(datetime.now() - timedelta(days=1)).strftime("%Y-%m-%d")),
    http_conn_id="conn1",
    headers={"Content-Type": "application/json"},
    response_check=lambda response: True if response.status_code == 200 else False,
    dag=dag,
)



t2 = Queryperator(
    task_id='cal',
    query_file='ca.sql',
    query_folder='include/sql_files/bla',
    token='Token',
    default_param_dict={"date": (datetime.now() - timedelta(days=1)).strftime("%Y-%m-%d")},
    dag=dag
)

export_file_from_S3_to_HDFS = ExportOperator(
    task_id='export_file_from_s3_to_hdfs',
    source_dict=s3_source_properties,
    target_dict='{user}/bla_{yesterday}_bla_raw_data.csv'.format(
        user=s3_source_bucket_path,
        yesterday=(datetime.now() - timedelta(days=1)).strftime("%Y%m%d"))),
    token='Token',
    dag=dag
)

1 个答案:

答案 0 :(得分:0)

要将参数传递到dag中,可以使用here中描述的方法。

然后仅使用模板来定义操作员的参数,我想模板将是这样的:

'{{ dag_run.conf.get("your_parameter_key", (datetime.now() - timedelta(days=1)).strftime("%Y-%m-%d") }}" '