1. ホーム
  2. airflow

[解決済み] エアフローです。PythonOperator: なぜ 'ds' 引数をインクルードするのですか?

2022-03-04 07:59:08

質問

Python_callable として使用される関数を定義しているとき、なぜ 'ds' が関数の最初の引数として含まれているのですか?

例えば

def python_func(ds, **kwargs):
    pass

Airflowのドキュメントを調べてみましたが、説明が見つかりませんでした。

解決方法は?

これは provide_context=True パラメータを使用します。Airflowのドキュメントによると。

を true に設定すると、Airflow は関数内で使用できる一連のキーワード引数を渡します。この一連のキーワード引数は、jinjaテンプレートで使用できるものと全く同じものです。これを動作させるには、関数のヘッダーで **kwargs を定義する必要があります。

ds はこれらのキーワード引数の1つで、"YYYY-MM-DD"のフォーマットで実行日を表します。ドキュメントで(templated)と記されているパラメータについては '{{ ds }}' デフォルトの変数で実行日を渡します。デフォルト変数についてはこちらで詳しく解説しています。

https://pythonhosted.org/airflow/code.html?highlight=pythonoperator#default-variables (廃止)

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

PythonOperator はテンプレート化されたパラメータを持っていないので、以下のようなことをすると

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

は動作しません。PythonOperator の呼び出し可能な関数内で実行日を表示するには、次のようにする必要があります。

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

または

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

お役に立てれば幸いです。