我不知道如何在计划时间动态创建气流中的任务。我的Dag是在知道运行时需要执行多少任务之前创建的。即,在每个dag触发器上,我都希望传递要处理的目录,以创建下一个Dag的任务列表。
到目前为止我什么都没想
args = {
'owner': 'airflow',
'start_date': datetime(2004, 11, 12),
}
dag = DAG(
dag_id='dyn_test',
default_args=args,
schedule_interval='@once'
)
dir = '/home/uname/dir'
filesInDir = next(os.walk(dir))[2]
for file in filesInDir:
task1 = # change 'file' structure
task2 = # store changed 'file'
task1 >> task2
在这里,我如何在触发Dag时传递'dir'变量,以便task1和task2将根据'dir'中存在的文件数运行。
答案 0 :(得分:1)
您可以使用Airflow Variables或环境变量。
# Using Airflow Variables
from airflow.models import Variable
dir = Variable.get("dir")
# Using Env Vars
import os
dir1= os.environ["dir1"]
args = {
'owner': 'airflow',
'start_date': datetime(2004, 11, 12),
}
dag = DAG(
dag_id='dyn_test',
default_args=args,
schedule_interval='@once'
)
filesInDir = next(os.walk(dir))[2]
for file in filesInDir:
task1 = # change 'file' structure
task2 = # store changed 'file'
task1 >> task2