Airflow 向DataFlowOperator上下文传递额外参数

Airflow 向DataFlowOperator上下文传递额外参数,airflow,google-cloud-composer,Airflow,Google Cloud Composer,当我触发我的DAG时,我在DAG\u run.conf['metadata'] 因此,我的触发事件如下所示: {'bucket':'blah blah', “contentType”:“text/json”, ‘crc32c’:‘375Jog==’,‘customTime’:‘1970-01-01T00:00:00.000Z’, “etag”:“CJCqi+DTrO0CEAk=”,“eventBasedHold”:False,“generation”:“1606821286696208”, 'i

当我触发我的DAG时,我在
DAG\u run.conf['metadata']

因此,我的触发事件如下所示:

{'bucket':'blah blah',
“contentType”:“text/json”,
‘crc32c’:‘375Jog==’,‘customTime’:‘1970-01-01T00:00:00.000Z’,
“etag”:“CJCqi+DTrO0CEAk=”,“eventBasedHold”:False,“generation”:“1606821286696208”,
'id':'xxx',
“种类”:“存储#对象”,
'md5Hash':'xxxx',
“mediaLink”:“xxxx”,
'metadata':{'url':'xxx',
“提取日期”:“20201115”,
“文件类型”:“xxxx”,
'filename':'xxxx.json',
'行计数':'30','提取时间':'063013'},
}
我有一个python函数,它在
on\u failure\u callback
上运行,但是这里的上下文与
dag\u run
上下文完全不同

失败时传递给函数的上下文为:

{'conf':,
‘dag’:‘ds’:‘2020-12-09’,
“下一步”:“2020-12-09”,
“下一个”——“20201209”,
....}
是否有方法将
dag_run.conf['metadata']
作为新上下文的一部分传递

我尝试过使用
partial
,但是
“{{dag_run.conf['metadata']}}”
被解释为字符串

我的dataflowoperator如下所示:

DataflowTemplateOperator(
task_id=“df_task1”,
job_name=“df-{dag_run.conf['trace_id']}}-{{dag_run.conf['file_type']}”,
template=“gs://dataflow/my df job”,
在_failure_callback=partial(任务_fail_slack_alert,{{dag_run.conf['metadata']}}})上,
参数={
“文件路径”:“{dag_run.conf['file_name']}”,
“traceId”:“{dag_run.conf['trace_id']}”
},
)
我的可调用函数现在刚刚打印出来:

def task\u fail\u slack\u警报(dag\u运行,上下文):
打印(“有效负载{}”。格式(上下文))
打印(“dag_运行{}”。格式(dag_运行))
日志:

INFO-payload{'conf':…}
INFO-dag_run{{dag_run.conf['metadata']}

你不能像那样使用
{{dag_run.conf['metadata']}
。 您可以从函数的以下位置访问它:

def task_fail_slack_alert(context):
    dag_run = context.get('dag_run')
    task_instances = dag_run.get_task_instances()
    print(task_instances)
    print(dag_run.conf.get('metadata'))
    print(context.get('exception'))

DataflowTemplateOperator(
        task_id="df_task1",
        job_name="df-{{ dag_run.conf['trace_id'] }}-{{dag_run.conf['file_type']}}",
        template="gs://dataflow/my-df-job",
        on_failure_callback=task_fail_slack_alert,
        parameters={
            "filePath":"{{ dag_run.conf['file_name'] }}",
            "traceId":"{{ dag_run.conf['trace_id'] }}"
        },
    )

你不能像那样使用
{{dag_run.conf['metadata']}
。 您可以从函数的以下位置访问它:

def task_fail_slack_alert(context):
    dag_run = context.get('dag_run')
    task_instances = dag_run.get_task_instances()
    print(task_instances)
    print(dag_run.conf.get('metadata'))
    print(context.get('exception'))

DataflowTemplateOperator(
        task_id="df_task1",
        job_name="df-{{ dag_run.conf['trace_id'] }}-{{dag_run.conf['file_type']}}",
        template="gs://dataflow/my-df-job",
        on_failure_callback=task_fail_slack_alert,
        parameters={
            "filePath":"{{ dag_run.conf['file_name'] }}",
            "traceId":"{{ dag_run.conf['trace_id'] }}"
        },
    )

谢谢,我会尽快测试的!埃拉德,你连续两天救了我两次!非常感谢。工作如期!谢谢,我会尽快测试的!埃拉德,你连续两天救了我两次!非常感谢。工作如期!