AirFlow 如何传参数给DAG

本文介绍了如何通过AirFlow的API和命令行传递参数给DAG。内容涉及GET方法获取DAG信息,POST方法运行DAG并传入自定义参数,以及在DAG中如何获取这些参数。提供了API交互的两种方式和命令行启动DAG的示例。
摘要由CSDN通过智能技术生成

题外话(可以直接跳过进入正题):

    最近需要使用airflow去调度任务,平常使用airflow都是调度的定时任务,这次不需要定时任务,只需要条件满足时主动触发airflow执行任务调度即可,同时将任务必要的外界参数传给DAG。查了好多资料发现都没有介绍如何将参数传给DAG的,于是就去看airflow文档,找到了使用命令行可以将参数传给DAG。但这种方式不适合我的任务需求,我需要调用airflow的API去触发airflow执行,可是官方文档中这块介绍的很少很少。也请教了一些人,得到的结果是airflow可能不支持自定义的参数传入。那怎么办呢?难道只能改源码?不科学呀,命令行支持,API怎么会不支持呢?于是本着不行就改源码的想法查看,一路查下去最后发现API和命令行调用的是同一个方法(trigger_dag),既然是同一个方法,肯定支持啊,于是有重新看了一下文档和源码,终于找到了二者之间的联系,哈哈哈,搞定~~

目录

1、通过API与AirFlow交互

(1)  GET方法获取指定下的指定信息

(2)  POST方法运行指定的

2、通过命令行启动DAG时传参


1、通过API与AirFlow交互

AirFlow提供了两种API交互方式:

(1)  GET方法获取指定<DAG_ID>下的指定<TASK_ID>信息

http://<WEBSERVER>:<PORT>/api/experimental/dags/<DAG_ID>/tasks/<TASK_ID>   #returns info for a task (GET).
  • 该接口返回的信息主要包括:

{
    "adhoc": &#
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Airflow可以通过使用`PythonOperator`和`Boto3`库中的`glue`模块来触发AWS Glue Job的执行。这里的参数可以从数据库中获取,然后传递给AWS Glue Job。具体步骤如下: 1. 在Airflow DAG中,使用`PythonOperator`定义一个Python函数,用于从数据库中获取参数并传递给AWS Glue Job。 ```python from airflow import DAG from airflow.operators.python_operator import PythonOperator import boto3 def trigger_glue_job(**kwargs): # 获取参数 db_conn = kwargs['redshift_conn_id'] db_sql = kwargs['sql'] glue_job_name = kwargs['glue_job'] # 从数据库中获取参数 redshift_hook = PostgresHook(postgres_conn_id=db_conn) conn = redshift_hook.get_conn() cursor = conn.cursor() cursor.execute(db_sql) result = cursor.fetchone() # 将参数传递给AWS Glue Job glue = boto3.client('glue') response = glue.start_job_run( JobName=glue_job_name, Arguments={ '--arg1': result[0], '--arg2': result[1], # ... } ) ``` 2. 在DAG中创建一个`PythonOperator`,将刚才定义的Python函数作为其参数。 ```python from datetime import datetime, timedelta default_args = { 'owner': 'airflow', 'start_date': datetime(2022, 1, 1), 'retries': 1, 'retry_delay': timedelta(minutes=1) } with DAG('my_dag', default_args=default_args, schedule_interval='@daily') as dag: # 定义PythonOperator,将刚才定义的Python函数作为其参数 trigger_glue_job_task = PythonOperator( task_id='trigger_glue_job', python_callable=trigger_glue_job, op_kwargs={ 'redshift_conn_id': 'my_redshift_connection', 'sql': 'SELECT arg1, arg2 FROM my_table WHERE id=1', 'glue_job': 'my_glue_job' } ) ``` 这样,当DAG运行时,`trigger_glue_job`任务将被触发,它会从数据库中获取参数,并将参数传递给AWS Glue Job。AWS Glue Job会使用这些参数来执行相应的任务。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值