Airflow 气流:PythonOperator:为什么要包括';ds';阿格?

Airflow 气流:PythonOperator:为什么要包括';ds';阿格?,airflow,Airflow,在定义一个稍后用作python_可调用函数的函数时,为什么将“ds”作为函数的第一个参数 例如: def python_func(ds, **kwargs): pass 我查阅了Airflow文档,但找不到任何解释。这与provide\u context=True参数有关。根据气流文件 如果设置为true,气流将传递一组可在函数中使用的关键字参数。这组KWARG与您可以在jinja模板中使用的内容完全对应。为此,您需要在函数头中定义**kwargs ds是这些关键字参数之一,以“YYY

在定义一个稍后用作python_可调用函数的函数时,为什么将“ds”作为函数的第一个参数

例如:

def python_func(ds, **kwargs):
    pass

我查阅了Airflow文档,但找不到任何解释。

这与
provide\u context=True
参数有关。根据气流文件

如果设置为true,气流将传递一组可在函数中使用的关键字参数。这组KWARG与您可以在jinja模板中使用的内容完全对应。为此,您需要在函数头中定义**kwargs

ds
是这些关键字参数之一,以“YYYY-MM-DD”格式表示执行日期。对于文档中标记为(模板化)的参数,可以使用
'{{ds}}'
默认变量传递执行日期。您可以在此处阅读有关默认变量的更多信息:

(过时)

PythonOperator没有模板参数,所以

python_callable=print_execution_date('{{ ds }}')
不行。要在PythonOperator的可调用函数中打印执行日期,您必须按以下步骤执行

def print_execution_date(ds, **kwargs):
    print(ds)


希望这能有所帮助。

如果你像
def something(**kwargs)
那样定义你的函数,那么你会得到一个错误“意外的关键字参数'dag'传递给python_callable(*op_args,**op_kwargs)”,所以看起来你需要一些其他的东西,我不太明白,但是在**kwargs之前使用这些关键字参数似乎是可行的。
def print_execution_date(**kwargs):
    print(kwargs.get('ds'))