Airflow 如何在动态DAG创建中动态传递任务id名称

Airflow 如何在动态DAG创建中动态传递任务id名称,airflow,airflow-operator,Airflow,Airflow Operator,下面是每个表的动态dag创建。我需要传递load_表的表名,以便任务可以在DAG edw_表A和load_表B中被视为load_表A 在DAG edw_表中 首先,因为您已经为不同的表生成了不同的DAG,所以也不需要将表名添加到任务id中 当然,如果您想这样做,可以通过在get_db_dag中添加一个table_name参数来取消简单的python字符串连接。。作用 然后您可以按如下方式调用上述函数 edw_table_A = get_db_dag( table_name='A'

下面是每个表的动态dag创建。我需要传递load_表的表名,以便任务可以在DAG edw_表A和load_表B中被视为load_表A 在DAG edw_表中


首先,因为您已经为不同的表生成了不同的DAG,所以也不需要将表名添加到任务id中

当然,如果您想这样做,可以通过在get_db_dag中添加一个table_name参数来取消简单的python字符串连接。。作用

然后您可以按如下方式调用上述函数

edw_table_A = get_db_dag(
        table_name='A',
        start_date=datetime.datetime(2020, 5, 21),
        schedule_interval='0 5 * * *',
        max_taskrun=3,  # Minutes
        max_dagrun=1,  # Hours
    )

谢谢,我们可以在load\u table=SnowflakeOperator…的load\u表中使用相同的Python字符串插值吗。。。。
def get_db_dag(
        *,                 # what is this?
        table_name,        # replace dag_id param with just table_name param
        start_date,
        schedule_interval,
        max_taskrun,
        max_dagrun,
        proc_nm            # remove load_sql param too (it is also redundant)
    ):

        ..


        dag = DAG(
            dag_id=f"edw_table_{table_name}",            # python 3+ string-interpolation
            schedule_interval=schedule_interval,
            ..
        )


        load_table = SnowflakeOperator(
            task_id=f"load_table_{table_name}",           # python 3+ string-interpolation
            sql=f"extract_{table_name}.sql",
            snowflake_conn_id=CONN_ID,
            ..
        )

        load_table                                        # what is this meant for? (it is redundant)

        return dag
edw_table_A = get_db_dag(
        table_name='A',
        start_date=datetime.datetime(2020, 5, 21),
        schedule_interval='0 5 * * *',
        max_taskrun=3,  # Minutes
        max_dagrun=1,  # Hours
    )