Python 3.x 动态DAG创建在Apache中未按预期工作
我试图理解动态DAG是如何在Apache airflow中创建的,因为在我的项目中创建动态DAG需要这个 以下是iam的链接: 下面是用于创建示例hello world动态DAG的代码块。(基于输入参数创建动态DAG) 我们的期望是创建9个这样的DAG。但是我可以看到,一旦我用Python 3.x 动态DAG创建在Apache中未按预期工作,python-3.x,airflow,Python 3.x,Airflow,我试图理解动态DAG是如何在Apache airflow中创建的,因为在我的项目中创建动态DAG需要这个 以下是iam的链接: 下面是用于创建示例hello world动态DAG的代码块。(基于输入参数创建动态DAG) 我们的期望是创建9个这样的DAG。但是我可以看到,一旦我用python3 code\u sample.py编译了上面的代码块,它就会创建9个DAG,但是嵌入DAG中的代码就是整个示例代码 但据我所知,创建的dag应该只有下面的代码块,在上面的示例代码块中的create_dag方法
python3 code\u sample.py
编译了上面的代码块,它就会创建9个DAG,但是嵌入DAG中的代码就是整个示例代码
但据我所知,创建的dag应该只有下面的代码块,在上面的示例代码块中的create_dag方法中可用
预期的DAG代码:
from datetime import datetime
from airflow import DAG
from airflow.operators.python_operator import PythonOperator
def hello_world_py(*args):
print('Hello World')
print('This is DAG: {}'.format(str(dag_number)))
dag = DAG(dag_id,
schedule_interval=schedule,
default_args=default_args)
with dag:
t1 = PythonOperator(
task_id='hello_world',
python_callable=hello_world_py,
dag_number=dag_number)
from datetime import datetime
from airflow import DAG
from airflow.operators.python_operator import PythonOperator
def create_dag(dag_id,
schedule,
dag_number,
default_args):
def hello_world_py(*args):
print('Hello World')
print('This is DAG: {}'.format(str(dag_number)))
dag = DAG(dag_id,
schedule_interval=schedule,
default_args=default_args)
with dag:
t1 = PythonOperator(
task_id='hello_world',
python_callable=hello_world_py,
dag_number=dag_number)
return dag
# build a dag for each number in range(10)
for n in range(1, 10):
dag_id = 'hello_world_{}'.format(str(n))
default_args = {'owner': 'airflow',
'start_date': datetime(2018, 1, 1)
}
schedule = '@daily'
dag_number = n
globals()[dag_id] = create_dag(dag_id,
schedule,
dag_number,
default_args)
实际DAG代码:
from datetime import datetime
from airflow import DAG
from airflow.operators.python_operator import PythonOperator
def hello_world_py(*args):
print('Hello World')
print('This is DAG: {}'.format(str(dag_number)))
dag = DAG(dag_id,
schedule_interval=schedule,
default_args=default_args)
with dag:
t1 = PythonOperator(
task_id='hello_world',
python_callable=hello_world_py,
dag_number=dag_number)
from datetime import datetime
from airflow import DAG
from airflow.operators.python_operator import PythonOperator
def create_dag(dag_id,
schedule,
dag_number,
default_args):
def hello_world_py(*args):
print('Hello World')
print('This is DAG: {}'.format(str(dag_number)))
dag = DAG(dag_id,
schedule_interval=schedule,
default_args=default_args)
with dag:
t1 = PythonOperator(
task_id='hello_world',
python_callable=hello_world_py,
dag_number=dag_number)
return dag
# build a dag for each number in range(10)
for n in range(1, 10):
dag_id = 'hello_world_{}'.format(str(n))
default_args = {'owner': 'airflow',
'start_date': datetime(2018, 1, 1)
}
schedule = '@daily'
dag_number = n
globals()[dag_id] = create_dag(dag_id,
schedule,
dag_number,
default_args)
让我知道是什么造成了上述问题单击“代码”选项卡时,您在Airflow UI中看到的代码只是整个
.py
文件源代码。请参见如何实现此功能:
这不是问题,但工作正常。昨天,我将我的多个DAG移到了动态DAG。每个dag的详细代码中显示的代码都是相同的。我使用variable&xcome让动态dag与不同的输入一起工作。