Airflow 气流中的动态任务id名称

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

我有一个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_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绑定到工作名上,工作就像一个符咒!谢谢