web-dev-qa-db-fra.com

Airflow: PythonOperator: pourquoi inclure l'argument 'ds'?

Lors de la définition d'une fonction à utiliser ultérieurement comme python_callable, pourquoi "ds" est-il inclus comme premier argument de la fonction?

Par exemple:

def python_func(ds, **kwargs):
    pass

J'ai regardé la documentation d'Airflow, mais je n'ai trouvé aucune explication.

14
subba

Ceci est lié au provide_context=True paramètre. Selon la documentation Airflow,

s'il est défini sur true, Airflow transmettra un ensemble d'arguments de mots clés pouvant être utilisés dans votre fonction. Cet ensemble de kwargs correspond exactement à ce que vous pouvez utiliser dans vos modèles jinja. Pour que cela fonctionne, vous devez définir ** kwargs dans votre en-tête de fonction.

ds est l'un de ces arguments de mot-clé et représente la date d'exécution au format "AAAA-MM-JJ". Pour les paramètres marqués comme (modèles) dans la documentation, vous pouvez utiliser '{{ ds }}' variable par défaut pour passer la date d'exécution. Vous pouvez en savoir plus sur les variables par défaut ici:

https://pythonhosted.org/airflow/code.html?highlight=pythonoperator#default-variables (obsolète)

https://airflow.incubator.Apache.org/concepts.html?highlight=python_callable

PythonOperator n'a pas de paramètres modèles, donc faire quelque chose comme

python_callable=print_execution_date('{{ ds }}')

ne fonctionnera pas. Pour imprimer la date d'exécution à l'intérieur de la fonction appelable de votre PythonOperator, vous devrez le faire comme

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

ou

def print_execution_date(**kwargs):
    print(kwargs.get('ds'))

J'espère que cela t'aides.

29
Dmitri Safine