Airflow 气流中的动态任务id名称
我有一个DAG,它有一个Airflow 气流中的动态任务id名称,airflow,google-cloud-composer,Airflow,Google Cloud Composer,我有一个DAG,它有一个DataflowTemplateOperator,可以处理不同的json文件。当我触发dag时,我通过{{dag_run.conf['param1']}}传递一些参数,并且工作正常 我遇到的问题是试图基于param1重命名任务\u id i、 e.task_id=“df_operator_read_object_json_file”{{{dag_run.conf['param1']}}”, 它只抱怨字母数字字符 或 task_id=“df_operator_read_ob
DataflowTemplateOperator
,可以处理不同的json文件。当我触发dag时,我通过{{dag_run.conf['param1']}}
传递一些参数,并且工作正常
我遇到的问题是试图基于param1重命名任务\u id
i、 e.task_id=“df_operator_read_object_json_file”{{{dag_run.conf['param1']}}”,
它只抱怨字母数字字符
或
task_id=“df_operator_read_object_json_file_{}”。格式(dag_run.conf['param1']),
它不承认dag_run和alpha问题
这背后的整个想法是,当我在dataflow作业控制台看到作业失败时,我知道谁是基于param1的罪犯。数据流作业名称基于任务id,如下所示:
df-operator-read-object-json-file-8b9eecec
我需要的是:
df-operator-read-object-param1-json-file-8b9eecec
如果可能的话,有什么想法吗?没有必要为每个文件生成新的运算符。
DataflowTemplatedJobStartOperator
具有job\u name
参数,该参数也已模板化,因此可与Jinja一起使用
我没有测试它,但这应该可以:
from airflow.providers.google.cloud.operators.dataflow import DataflowTemplatedJobStartOperator
op = DataflowTemplatedJobStartOperator(
task_id="df_operator_read_object_json_file",
job_name= "df_operator_read_object_json_file_{{dag_run.conf['param1']}}"
template='gs://dataflow-templates/your_template',
location='europe-west3',
)
你是说,每次跑步,根据json文件,您的DAG将有不同的任务id,是吗?param1只能接受5个不同的值任务id应该是字符串+param1这是计划的DAG还是每次运行都只有手动输入的手动DAG?一旦文件到达DAG,就会由云函数触发,该函数传递运行DF作业所需的所有参数这意味着如果您调用该函数1000次,它将创建1000个任务,每个任务运行一次,并且永远不会再次运行?这不是气流的良好实践。DataflowTemplatedJobStartOperator(更新后的运算符)具有作业名称参数,您可以使用该参数进行配置。你不需要将任务id绑定到工作名上,工作就像一个符咒!谢谢