我创建了计算昨天日期的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
)
答案 0 :(得分:0)
要将参数传递到dag中,可以使用here中描述的方法。
然后仅使用模板来定义操作员的参数,我想模板将是这样的:
'{{ dag_run.conf.get("your_parameter_key", (datetime.now() - timedelta(days=1)).strftime("%Y-%m-%d") }}" '